2017-01-31 3 views
0

Я собираюсь создать два приложения. Один из них в WPF и второй в ASP.MVC. Я решил создать веб-сервис, который будет слоем между базой данных и моими приложениями. Я не хочу использовать модели сущностей в своих приложениях. Я хочу создать облегченные модели, отправить их в webservice, а затем перевести их в модели сущностей. Мой вопрос - как создать общие модели для WPF и MVC? Я не знаю, как это сделать, потому что я хочу использовать атрибуты аннотации данных для MVC, а также реализовать интерфейс INotifyPropertyChanged для WPF. Будут также другие вещи, которые я думаю. Есть ли хороший подход к этому? Или это невозможно?Общие модели для WPF и ASP.NET MVC

+0

INotifyPropertyChanged не является интерфейсом, связанным с WPF (или UI). Создавайте разные классы viewModel для настольных и веб-проектов и общих объектов модели и объектов. –

ответ

0

Ну, в первую очередь, нет ничего плохого в том, что выставляющий объект классы вне DAL. Это просто занятия. В них нет ничего особенного. Что заставляет их делать материал базы данных, это их включение в класс DbContext, и вы могли бы переместить все аннотации и другую конфигурацию в контекст, используя свободную конфигурацию и иметь нетронутые классы без какого-либо внешнего влияния в них.

Также существует тенденция добавлять слишком много конфигураций в классы сущностей. Они должны иметь только то, что важно на уровне базы данных. Такие вещи, как [EmailAddress], которые инструктируют, как свойство должно быть проверено на почте, не подходят для класса сущности.

Это указано, что место, где можно положить вещи, такие как [EmailAddress], и другие виды, предназначенные для просмотра, находятся на модели просмотра. Который должен в значительной степени прояснить остальную часть вашего замешательства. Нужно реализовать INotifyPropertyChanged? Сделайте это с помощью модели представления. и отобразить данные своей сущности в/из нее.

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

Чтобы уточнить последний бит, классы, имеющие значение для ваших приложений WPF/MVC, должны быть их моделями просмотра, и они будут уникальными для приложения. Логика для того, что необходимо в WPF и как сопоставить данные сущности с/из того, что принадлежит WPF-приложению. Было бы неуместно, чтобы код, создающий экземпляры класса, использовался в качестве приложения directy в приложении WPF для создания некоторой службы, которая должна быть связана с получением данных в первую очередь. Это было бы нарушением принципа единой ответственности. Пусть каждая вещь делает то, что она предназначена. Другими словами, сохраните код WPF с кодом WPF. У вас все еще может быть библиотека, которая обрабатывает сопоставление между слоем данных и вашими представлениями моделей WPF, но это должно быть отдельной вещью, которая будет только зависимостью вашего приложения WPF.