Реализация рабочего процесса в PureMVC - PullRequest
1 голос
/ 11 октября 2011

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо Curtis

Ответы [ 3 ]

4 голосов
/ 13 декабря 2011

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

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

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

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

1 голос
/ 12 октября 2011

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

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

0 голосов
/ 11 ноября 2011

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

...