Я создаю свое первое приложение MVC в Visual Studio 2013 (MVC 5), и мне немного неясно, как лучше настроить мою модель.
Я сгенерировал модель структуры сущности, используя код сначала из существующей базы данных. Моим первым инстинктом было создание некоторых промежуточных классов, которые были бы моделью, используемой представлениями, и чтобы эти классы работали с классами структуры сущностей.
Когда я писал промежуточные классы, я осознал, что я в основном просто перевоплощал многое из того, что классы EF уже делали с помощью случайного частного установщика или приведения из одного типа данных в другой. Так что это казалось пустой тратой.
Является ли общим правилом прямое использование классов структуры сущностей в качестве модели для приложения MVC? Или есть какая-то выгода, которую мне не хватает для создания этих промежуточных классов?
источник
Ответы:
В моих приложениях я всегда разделял вещи, используя разные модели для базы данных (Entity Framework) и MVC. Я также разделил их на разные проекты:
Вместо хранения ссылок на другие объекты, как это делают сущности домена, модели MVC содержат идентификаторы как целые числа.
Когда поступает запрос GET для страницы, контроллер MVC выполняет запрос к базе данных, который возвращает объект. Я написал методы "Converter", которые берут предметную сущность и преобразуют ее в модель MVC. Существуют и другие методы, которые делают обратное (от модели MVC до сущности домена). Затем модель передается в представление и, следовательно, клиенту.
Когда приходит запрос POST, контроллер MVC получает модель MVC. Метод конвертера преобразует это в объектную сущность. Этот метод также выполняет любые проверки, которые не могут быть выражены как атрибуты, и гарантирует, что, если сущность домена уже существует, мы обновляем ее, а не получаем новую. Методы обычно выглядят примерно так:
Используя эти методы, я убираю дублирование, которое в противном случае происходило бы в каждом контроллере. Использование генериков может дедуплицировать вещи еще дальше.
Выполнение этих действий дает множество преимуществ:
источник
Я бы сказал, что это действительно зависит от вашего приложения. Это просто делает чистый CRUD, без какой-либо бизнес-логики? Тогда я бы использовал модели EF прямо в моих взглядах.
В большинстве случаев, по крайней мере, присутствует некоторая бизнес-логика, и тогда хорошей идеей может быть слой между моделями данных / EF и представлением. В этом случае может быть целесообразно выполнить «CQRS-lite» (см. Ниже) и использовать разные модели для и из вашего контроллера. Чаще всего читаемые модели намного "толще", чем пишущие модели ...
Однако, если приложение содержит много бизнес-логики и / или нуждается в большом масштабировании, я бы реализовал по крайней мере ее ядро, используя CQRS (сегрегация ответственности при выполнении командных запросов), DDD (управляемый доменом дизайн) и, возможно, источник событий. Тогда EF может быть использован в качестве читаемого фасада модели.
Также помните, что вам не нужно придерживаться одной стратегии / шаблона для всего приложения, некоторые области могут быть просто CRUD, а другие могут содержать много бизнес-логики ...
источник