Реализация рабочего процесса в PureMVC

Я ищу предложения относительно реализации управления процессом / рабочим процессом в приложении на основе PureMVC.

Наше приложение Flex включает в себя ряд процессов, таких как создание аккаунта, обработка платежей и т. Д.

В нашей команде обсуждается, насколько строго мы должны придерживаться модели PureMVC.

В рамках модели PureMVC кажется разумным, что текущее состояние процесса может управляться через прокси.

Команды четко отвечают за обработку действий, требуемых для каждого узла, и за переходы узлов.

Медиаторы для управления пользовательским интерфейсом.

Тем не менее, я думаю, что здесь по-прежнему отсутствует важный бит: ProcessController.

Все подходы, которые мы рассмотрели, похоже, либо нарушают модель PureMVC (даже незначительно), либо создают нечитаемый код.

  • Прокси-сервер будет поддерживать состояние процесса. Таким образом, это кажется подходящим способом реализации контроллера. Тем не менее, это помещает много бизнес-логики в прокси.

  • Пространство посредника имеет больше смысла, но контроллер в этом пространстве не обязательно будет напрямую взаимодействовать с каким-либо конкретным элементом пользовательского интерфейса, а вместо этого будет координировать / делегировать выделенным посредникам.

  • Еще одна модель заставила бы нас поместить информацию о переходе процесса в команды. Хотя это, кажется, лучшее место для этой работы (учитывая роль команд относительно прокси-серверов и посредников), этот подход, по-видимому, создает некоторый особенно отвратительно выглядящий код с логикой перехода процесса, распределенной по множеству команд.

Так как же другие справились с этой проблемой?

Спасибо Кертис

3 ответа

Это как раз та проблема, которую PureMVC StateMachine Utility (и конечные автоматы в целом) предназначены для решения.

В простом формате XML вы можете определять состояния, допустимые переходы в другие состояния и действия, которые инициируют эти переходы.

Все это основано на уведомлениях, поэтому вы отправляете уведомления StateMachine.ACTION, которые заставляют StateMachine выполнять любую входную / выходную защитную логику, которая может потребоваться (например, разрешить выход из состояния FORM_ENTRY, только если все данные действительны, или разрешить вход только в состояние FORM_PROCESSING, если у пользователя есть права администратора и т. д.). Если происходит изменение состояния, отправляются уведомления, которые можно использовать для организации представления или выполнения логики при входе в новое состояние.

Вот презентация StateMachine Overview, которая даст вам лучшую идею http://puremvc.tv/

Я думаю, что ваша идея "ProcessController", вероятно, лучший способ сделать это. Лично я не фанат PureMVC и не использую его, потому что он не позволяет достаточно гибкости или точек расширения, чтобы помочь с такими проблемами.

Честно говоря, трудно дать совет по вашей проблеме, потому что я не знаю точно, чего вы пытаетесь достичь. Я согласен с тем, что проблема должна решаться одним объектом. Если вы можете, попытайтесь создать модель, которая может хранить данные для процесса, а другой класс просто управляет ими. Не уверен, имеет ли это смысл, но опять же, ваша проблема не очень ясна.

В качестве дополнительного дополнения, я хотел бы изучить инъекции зависимости. Я пытаюсь вспомнить, если PureMVC делает это (я не думаю, что это делает), но с DI это было бы довольно простой проблемой, чтобы решить. Фреймворки, такие как Parsley и Robotlegs, действительно хороши в этом.

В pureMVC State Machine Utility, вероятно, является лучшим выбором для контроллера процесса - и, кстати, согласно документу "Идиомы реализации и лучшие практики". для PureMVC вполне нормально иметь посредников, которые не управляют видимым компонентом

Другие вопросы по тегам