MVP и IoC - WinForms, как реализовать «коллекцию экранов»? - PullRequest
0 голосов
/ 21 июня 2011

Я не могу найти лучшего названия для того, что я пытаюсь сделать, поэтому собрание экрана подойдет, хотя это не название шаблона, который использует Джереми Миллер в своей серии «Как реализовать свою собственную CAB» ,

Я пытаюсь создать отдельный класс ScreenConductor, который управляет отображением встроенных представлений / экранов в приложении WinForms. ScreenConductor знает, например, ShowShell(), и там он решает, скрыта ли оболочка или нет, инициализирует представление по умолчанию в оболочке и т. Д. Теперь для этого ScreenConductor зависит от ScreenRepository, у которого, в свою очередь, есть методы GetShell(), GetScreen1(), GetScreen2() и т. д. - и, как я себе это представлял, у него будет метод для возврата каждого экрана приложения.

Теперь, допустим, я хочу внедрить эти «экраны» здесь: я могу сделать стиль локатора службы (IoC.Resolve<SomeScreen>()) или у меня может быть инъекция конструктора для этих представлений (или внедрение сеттера может быть лучше, но это не главное ). То, что я спрашиваю, - это некоторый совет, если я двигаюсь в правильном направлении с этим, приложение не очень сложное, я знаю все представления статически, это не какое-то приложение документа с вкладками MDI или что-то в этом роде.

1 Ответ

1 голос
/ 21 июня 2011

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

Пока вы реализуете каждый Экран как интерфейс, который все наследует от одного и того же корневого интерфейса, вы должны быть хороши, например:

интерфейс IScreen

интерфейс IShellScreen: IScreen

и т. Д.

ScreenRepository должен возвращать типы IScreen (на самом деле вы можете использовать общий шаблон репозитория), которые я приведу в ScreenConductor.

Затемэто зависит от вас - вы можете использовать контейнер IoC или DI непосредственно в конструкторах.

Это сложно, но если вы спроектируете его таким образом, вы знаете, что оно будет масштабироваться - я бы не сталэто для приложения, у которого было 4 формы, но одно из 400, безусловно, нуждается в таком подходе!

HTH Duncan

...