Скажем, мы хотим сделать application, содержащий следующее:
- Асинхронный и потребляющий время
operationsна выбранномobjects - Для определенного
objectмы хотим получить доступ кstatusсвязанногоoperation. - Возможность
show,cancelиpauseвыполнять эти операции изmultiple views.
Тогда мой вопрос следующий:
Где эти operations и их progress/status принадлежат шаблону проектирования приложений?
Чтобы включить его в контекст, это фиктивное приложение:
Пример приложения:
У нас есть приложение, в котором вы можете применить разные Filters к Images. Приложение состоит из Directory View и Detail View.
- Каждый
filterможет быть примененasynchronouslyк любомуimageиз каждогоview. -
filter-операция может бытьobservedиcanceledизviews. - Операция с фильтром не может быть запущена, если для тех
filter-typeиimageуже есть один, или если такойfilterуже создалresult. - В этом фиктивном приложении представления следуют, но в общем случае вы не сможете передавать информацию непосредственно между представлениями.
Прогресс
Развязка Service Layer или Network Controller с view и Model в шаблоне проектирования, например MVC или MVVM, достаточно проста, если вы не предоставляете больше UX feedback чем a spinner, когда есть активный network request.
Но когда я работаю над приложением, подтверждающим вышеприведенные критерии, я всегда заканчиваю либо
- Не позволяя
userизменятьviewво времяoperation -
Taggingоперации сidобъекта, обработанного в данный момент и передающего его вviews, или поиск вNetwork Controllerнепосредственно изviews/view controllers - Создаем отдельный
entitiesдляoperations, и вдруг у меня естьrequest operationв моемModel
Таким образом, очевидно, что есть (очень вонючие) способы обойти это, но все они чувствуют себя грязными и не связаны с тем, как шаблоны предназначены.
Таким образом, с точки зрения архитектуры и дизайна, как бы вы приблизились к этому?

