2013-04-05 3 views
0

Я унаследовал приложение, которое использует представление-первых MVVMC PaternМногократного WPF MVVM Просмотры

В приложении я создал 2 шаг процесс, который создает человек и назначает их в группу. Для этого я создал представление и соответствующую модель представления (все представления имеют отношение 1-2-1 к модели представления, модели представления вводятся в конструктор вида и регистрируются в контейнере Unity с помощью TransientLifetimeManager), называемого CreatePersonMaster , представление просто содержит область (показанную пунктирной линией), в которую могут быть загружены подзадачи, и модель представления подписывается на два слабо связанных события «PersonCreated» и «GroupSelected». Событие «PersonCreated» сохраняет объект Person в поле, а событие «GroupSelected» принимает сохраненное лицо, создает ассоциацию группы и сохраняет их в базе данных.

Эта модель просмотра/просмотра ничего не делает до тех пор, пока события не будут подняты, поэтому я загружаю следующие суб-представления в свой регион.

Create Person Views

Эти мнения/представление модели сгореть события, которые получают обрабатываемые мастер зрения.

У меня также есть вид редактирования, где я хочу повторно использовать вид группы.

Edit Person Views

Я могу это сделать, подписавшись на соответствующие события в модели представления EditPersonMaster.

Мой вопрос на самом деле, это подходящий способ сделать это? Поскольку я использую слабо связанные события, я не получаю никакой обратной связи в Sub-View/ViewModels, если есть ошибка при создании/переназначении? Возможно, я мог бы запустить еще одно событие «ErrorBlah» для внутреннего представления/модели для обработки и обновления представления.

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

ответ

0

Вот как я понял ваш вопрос: у вас есть люди, хранящиеся в базе данных, которые имеют свойство/столбец group. В пользовательском интерфейсе вы хотите создать людей и присвоить свойство группы. Кроме того, вы хотите иметь возможность редактировать свойство группы существующих лиц в другом регионе/странице/мастер. Вы хотите повторно использовать элемент управления для назначения группы. Ваши элементы управления запускают событие, которое обрабатывает Мастер таким образом, что он создает записи в базе данных (это правильно?). Ваш вопрос заключается в том, является ли это хорошим подходом и какие альтернативы у вас есть?

Я вижу два варианта:

1. модуляризует бизнес-логику:

Вы можете инъекционную услугу передачи данных в ваши ViewModels, которые могут получить доступ к базе данных напрямую. Таким образом, вы можете обрабатывать ошибки и т. Д. Непосредственно там, где они происходят, и им не нужно передавать их через всю систему. Если вы хотите уведомить другие модули об изменениях в базе данных (указав измененный набор данных или так), вы можете сделать это с помощью составного события. Я думаю о модулях PRISM больше, чем о полных элементах, включая интерфейс и бизнес-логику, и поддерживать связь между ними как можно меньше.

2.Держите свою бизнес-логику центральной и делитесь ею:

Если вы хотите придерживаться своей архитектуры, используйте модель Singleton Model, которая вводится в ViewModels. Управляйте своим состоянием в модели и позволяйте ViewModels выбирать части, которые они хотят предоставить своему представлению.

Надеюсь, я получил его, хотя ...