Что должен делать контроллер приложений?
Я немного смущен тем, что должен делать контроллер приложения? Поскольку я вижу, что функциональность будет также существовать в вашем шаблоне MVP, чтобы принимать решения, которые должны отображаться при нажатии кнопки? Есть ли хорошие примеры для Windows Forms, которые используют шаблон контроллера приложения?
В MVC (ontroler) и Application Controller есть разница. Я знаю MVC (ontroller), я не уверен, что является обязанностью для Application Controller и как он вписывается в приложение WinForms. Мартин Фаулер также называет это шаблоном Application Controller, конечно же, это не то же самое, что MVC (ontroller)?
Ответы
Ответ 1
Недавно я написал статью о создании и использовании ApplicationController в проекте С# Winforms, чтобы отделить рабочий процесс и презентаторов от форм напрямую. Это может помочь:
Развязывание рабочего процесса и форм с помощью контроллера приложений
изменить
В настоящее время Archive.org получил более читаемую копию статьи.
Ответ 2
Контроллер приложений - это бит другого зверя, чем контроллер, используемый в MVC.
Страница Мартина Фаулера в Application Controller.
В случае приложения MVP WinForms, которое, кажется, является тем, о чем я думаю. Вы можете поместить всю логику для "какой формы я покажу сейчас" в презентаторе, но по мере роста вашего приложения вы будете дублировать много кода между презентаторами.
Скажем, у вас есть 2 представления, у которых есть кнопка "Изменить этот виджет", для обоих из них должна быть логика для получения WidgetEditorPresenter и отображения соответствующего представления. Если у вас есть ApplicationController, вы перемещаете эту логику в ApplicationController, и теперь у вас просто есть зависимость во всех ваших презентаторах на ApplicationController, и вы можете вызвать appController.EditWidget(), и он отобразит правильный вид.
Контроллер приложения - это uber-контроллер, который управляет потоком приложения во всей вашей системе при переходе с экрана на экран.
Ответ 3
Лично у меня нет опыта работы с MVP или winforms, но я работал с MVC. Надеюсь, это то, о чем вы просите, иначе проигнорируйте мой ответ полностью.
C в MVC отвечает за не просто выбор следующего представления, которое будет представлено клиенту. Он содержит большую, предпочтительно все, бизнес-логику приложения, включая выполнение системных задач (например, ведение журнала и принудительное выполнение разрешений при потоке данных из модели и к ней).
Его основная задача, естественно, состоит в том, чтобы обслуживать отображающий слой над ним и отделять его от слоя модели ниже при посредничестве между ними. Думаю, вы можете думать об этом как о мозге приложения.
Надеюсь, что это поможет,
Yuval = 8 -)