Разделение частей приложения на их собственные сборки при использовании Prism - PullRequest
2 голосов
/ 02 марта 2011

Подход MVVM поощряет (или просто дает возможность) разбить приложение WPF или Silverlight на Модель , ViewModel и View проекты, чтобы все три могли существовать в своих собственных сборках.

Используя Prism (и, в моем случае, MEF в качестве контейнера внедрения зависимостей), с другой стороны, можно построитьмодульное приложение, которое разделено на набор функциональных блоков (именованных модулей), и каждый блок в данном случае представляет собой отдельную сборку.
Прав ли я в том, что в этом случае мы можем отделить только Модель в отдельной сборке, но View и ViewModel должны находиться в одной сборке, представляющей один функциональный модуль?

Ответы [ 2 ]

4 голосов
/ 02 марта 2011

Прежде всего, модуль не является равной сборкой. Вы можете распределить части модуля между несколькими сборками (включая Модели, Представления и ViewModels). Хотя обычно классы, связанные с модулем, обычно помещаются в один файл DLL или XAP (в случае Silverlight, если ваш модуль является отдельным приложением Silverlight).

В вашем случае, если Модель является общей сущностью, которая может использоваться несколькими модулями, Prism рекомендует поместить ее в так называемую сборку инфраструктуры, которая поддерживает общую немодульную логику. В противном случае было бы неплохо объединить детали MVVM, поскольку они решают общие бизнес-задачи. В будущем, если вам потребуется заменить реализацию одной из частей MVVM, вы можете сделать это, просто добавив новую и настроив отображение контейнера.

3 голосов
/ 02 марта 2011

Да, Prism рекомендует вам помещать все (модели, виды и модели видов) в один автономный функциональный модуль.

В любом случае, я бы настоятельно НЕ рекомендовал разбивать виды и модели моделей на отдельныепроекты.Это потому, что они тесно связаны между собой и развиваются бок о бок.

Итак, есть два рекомендуемых подхода к организации вашего MVVM-приложения.Первый - это когда вы организовываете свой проект по слоям и помещаете свои представления и модели в отдельные папки внутри проекта.Во-вторых, когда вы создаете папки по функциям и не разделяете виды и модели моделей, то есть они лежат рядом в одной и той же папке.Я лично выбираю второй, потому что, как я уже говорил, они разрабатываются и поддерживаются всегда вместе, и таким образом очень легко найти соответствующий вид или модель вида.

...