Где находится корень композиции в приложении WPF MDI?

В традиционных приложениях MDI некоторые объекты (формы) будут созданы при выполнении команды (например, при нажатии кнопки на ленте), поэтому это может быть точка композиции. Меня смущает корень композиции в таких приложениях. Я где-то читал, что мы можем использовать ViewModelLocator, который выглядит как шаблон Service Locator. Как вы знаете, шаблон локатора сервисов осуждается некоторыми людьми.

Теперь, пожалуйста, посоветуйте мне по этому вопросу.

Заранее спасибо.


person Amir Karimi    schedule 31.01.2012    source источник


Ответы (1)


Является ли ViewModelLocator локатором службы или нет частично зависит от его подписи и частично на его роли.

В любом случае корнем композиции приложения WPF является Метод OnStartup — это не меняет того, является ли приложение приложением MDI.

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

person Mark Seemann    schedule 31.01.2012
comment
Большое спасибо, и в целом я хочу, чтобы мои модели просмотра содержали UnitOfWork (UnitOfWork per Form). Должен ли я использовать внедрение метода для абстрактных фабричных методов? Другими словами, абстрактные фабричные методы получают абстракцию единицы работы и что-то еще, чтобы найти правильную модель представления для создания. Это правильно? - person Amir Karimi; 01.02.2012
comment
И еще вопрос, кто должен создавать экземпляры Form? Может быть, это Абстрактная Фабрика? Я использовал UserControls в качестве своих форм. - person Amir Karimi; 01.02.2012
comment
UoW — это, по сути, эфемерная зависимость, так что это звучит как что-то, что лучше всего создается (внедренной) абстрактной фабрикой. - person Mark Seemann; 01.02.2012
comment
Кто создает экземпляры форм? Поскольку вы используете WPF, я бы предложил применить шаблон MVVM. Это означает, что механизм шаблонов WPF создает представления на основе типа ViewModel. - person Mark Seemann; 01.02.2012
comment
Мне жаль. У меня есть еще один вопрос! В методах абстрактной фабрики я должен использовать новое ключевое слово или метод разрешения контейнера. Это противоречит концепции корня композиции, не так ли? - person Amir Karimi; 01.02.2012
comment
Нет, если вы поместите его в корень композиции: blog .ploeh.dk/2011/08/25/ServiceLocatorRolesVsMechanics.aspx - person Mark Seemann; 01.02.2012
comment
Марк, ты помог мне гораздо больше, чем ты мог подумать. Большое спасибо. Я постараюсь сделать лучшее программное обеспечение. - person Amir Karimi; 01.02.2012