Что должен делать контроллер приложений?

Я немного смущен тем, что должен делать контроллер приложения? Поскольку я вижу, что функциональность будет также существовать в вашем шаблоне 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 -)