Скажем, мы хотим сделать 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
Таким образом, очевидно, что есть (очень вонючие) способы обойти это, но все они чувствуют себя грязными и не связаны с тем, как шаблоны предназначены.
Таким образом, с точки зрения архитектуры и дизайна, как бы вы приблизились к этому?