Проверка при использовании MVVM (WPF) с моделью на основе DDD - PullRequest
0 голосов
/ 01 декабря 2010

Общий подход MVVM / WPF заключается в привязке данных к элементам управления пользовательского интерфейса непосредственно к базовому объекту модели. Объект модели может содержать собственную логику проверки (возможно, предоставляемую через IDataErrorInfo) или может быть проверен вспомогательным классом, проверяющим экземпляр объекта модели на наличие ошибок. В любом случае временами модель содержит недопустимые данные и поэтому находится в недопустимом состоянии.

Однако в мире DDD модель никогда не должна находиться в недопустимом состоянии. Как вы предлагаете выполнить проверку при использовании WPF и DDD?

Спасибо
Ben

Ответы [ 3 ]

1 голос
/ 02 декабря 2010

Я склонен думать, что фасад или подобный слой следует использовать как «модель» MVVM. Этот фасад может быть в недопустимом состоянии (в отличие от модели DDD). Для проверки он может содержать собственную логику или использовать инструмент, подобный FluentValidation. Как только он находится в допустимом состоянии, может быть вызвана его функция "do action". Это передаст данные на фасаде в базовую модель DDD. При таком подходе модель DDD ни в коем случае не сталкивается с неверными данными.

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

1 голос
/ 01 декабря 2010

Я не думаю, что представление в MVVM должно быть привязано непосредственно к модели предметной области, оно действительно должно быть привязано к модели представления.Тогда модель представления может находиться в «недопустимом» состоянии, которое может быть отражено через IDataErrorInfo.Только позже, когда пользовательская операция (например, «Сохранить», «ОК», «Применить») применяет это к базовой модели домена, если модель домена обеспечивает корректность, вы можете также запретить применение, не разрешив операцию в пользовательском интерфейсе.Я должен сказать, что обнаружил, что это не всегда легко сделать без дублирования логики проверки в некоторой степени.

0 голосов
/ 01 декабря 2010

Проверка относится к вашей бизнес-логике (модель домена).Я предлагаю взглянуть на FluentValidation для .NET.

Мне действительно повезло, когда установщик ViewModel вызвал базовый объект Model и позволил FluentValidation вызвать исключение.Если вы используете WPF TextBox, привязка будет продолжать работать, но TextBox покажет красный контур (при условии, что вы использовали синтаксис, в котором TextBox обновляет ViewModel при каждом нажатии клавиши).Только не бросайте исключение в получателе, иначе вы нарушите привязку.

Лучше направить все ваше общение от ViewModel к модели через некоторого посредника (я представил Presenter, но это может бытьтак же просто, как передача операции Model как лямбда-функции обратному вызову на некотором посреднике).Когда во время работы с моделью возникает исключение, докладчик ловит исключение и отображает дружественное сообщение для пользователя с подробностями из исключения.Для этого FluentValidation выдает действительно хорошие сообщения об ошибках по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...