Модели доменов, DTO и MVVM (WPF) - куда поместить INotifyPropertyChanged? - PullRequest
0 голосов
/ 01 декабря 2018

Мне нужно создать приложение WPF с шаблоном MVVM в качестве слоя моего решения.
Решение имеет: Домен, DAL (возвращает объекты домена), DTO, BLL (возвращает объекты DTO).

проблема заключается в том, что для реализации шаблона MVVM мне кажется, что мне нужно продублировать модели моего домена в проекте WPF, чтобы я мог реализовать на них интерфейс INotifyPropertyChanged?Затем я также должен сопоставить эти модели с DTO, чтобы я мог использовать службы BLL?

Ответы [ 2 ]

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

Inotifypropertychanged должно быть реализовано для всего, что вы связываете, и вы хотите уведомить об изменении свойства.Вам не всегда нужно это уведомление.Например.Вы редактируете запись, вы вносите изменения.Может быть, это все, что вы делаете с этими данными, и единственное связанное поле - это то, в которое вы только что ввели.Это означает, что вы можете просто связать свойство dto простым get и set.Хотя - это должно быть представлено из модели представления, которая реализует inpc, потому что есть очень тонкая утечка памяти, ожидающая, чтобы вас поймать иначе.

Вернемся к нашему воображаемому приложению.Почему бы нам не захотеть связываться напрямую с сущностью или объектом dto?

Как насчет того, когда вы пытаетесь сохранить эти изменения.Проверка не пройдена.Но вы изменили этот объект - эти новые значения являются непослушными.Пользователь «вынужден» их исправить, или вы как-то отменили свои изменения.Как вы их обратно?Вы редактируете некоторые dto?Потому что ваш пользователь только что сломал эти данные.Если у вас есть какая-то коллекция данных, кэшированных где-то, вы меняете одну из них напрямую?

Очевидно, вы могли бы снова перечитать эти данные из базы данных.И снова, если вы не позволите им редактировать это dto, вам не нужно этого делать.

Я обычно копирую данные из dto в модель представления и работаю в этом.Я использую подпрограмму копирования свойств на основе отражений, которая идентифицировала общие свойства между двумя типами.Я проверяю эту модель представления, когда каждое свойство передается в виртуальную машину и весь объект на коммит.Его значения копируются в dto и отправляются обратно в хранилище или в метод UoW update.

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

Модели представления предназначены для работы с представлениями, поэтому они не всегда сопоставляют 1-1 с объектами домена.

  • Иногда представлению необходимо отображать данные из нескольких объектов домена.
  • Иногда представлению требуются только некоторые данные из объекта домена.
  • Иногда представлению требуются данные, относящиеся только к представлению (например, к выбранному элементу).

ИтакВопрос о том, как заполнить данные в ViewModel, может быть сложным.Большую часть времени я просто пропускаю DTO, и ViewModel сам получает данные.Или, если это невозможно, попросите DAL заполнить ViewModel, как если бы это был DTO.Это действительно зависит от того, как работает остальная часть инфраструктуры приложений.В общем, я стараюсь сделать как можно меньше слоев.В идеале моя ViewModel должна получать необходимые данные как можно напрямую.

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