Нужна ли прослойка между Entity Framework и сайтом?

Здравствуйте!

Помогите, пожалуйста, разобраться. Нужна ли дополнительная прослойка из модели между Entity Framework и контроллером который работает со слоем данных. Т.е. вижу 2 варианта:

1.

Есть таблица dbUsers в базе. В EF создаются классы dbUsers. Неким образом создается класс User. Слой данных работает с объектами EF а пользователю (контроллеру) отдает красивые чистые объекты класса User без лишней информации.

2.
Есть таблица dbUsers в базе. В EF создаются классы dbUsers. Слой данных напрямую работает с этими объектам и передает их в контроллер. Т.е. контроллер работает с объектами типа dbUsers…

Подскажите, как правильно и почему?
  • Вопрос задан
  • 3381 просмотр
Пригласить эксперта
Ответы на вопрос 4
@lair
Пункт 0: используйте EF CodeFirst или POCO templates, тогда у вас будут «чистые классы» in the first place.
Пункт 1: все нижесказанное верно до тех пор, пока у вас контроллер работает напрямую с DAL, а не со слоем бизнес-логики или сервисов.

Есть таблица dbUsers в базе. В EF создаются классы dbUsers. Неким образом создается класс User. Слой данных работает с объектами EF а пользователю (контроллеру) отдает красивые чистые объекты класса User без лишней информации.

Это лишняя прослойка.

Есть таблица dbUsers в базе. В EF создаются классы dbUsers. Слой данных напрямую работает с этими объектам и передает их в контроллер. Т.е. контроллер работает с объектами типа dbUsers…

Это вполне нормально.
Ответ написан
Комментировать
SychevIgor
@SychevIgor
С точки зрения архитектурных концепций и феншуя должна быть некоторая прослойка уже просто потому, что контроллеру нужна view model а она отличается от того что есть просто model. пример нужно сделать pager… те у нас должна появиться view model с массивом этих объектов(реально все таки если база большая не совсем массив или список но да ладно) и номер страницы а это уже извиняюсь не то что в базе хранится…
тут уже контекст веб приложения есть некоторый о котором база и model данных не обязаны знать

А с точки зрения быстрой разработки можно и на прямую делать и нарушать все концепции mvc и прочее. Ну и если вы делаете простую админку на select update delete insert то там тоже мне кажется все болт клали на это
Ответ написан
ganouver
@ganouver
Вот здесь ViewModel и Domain Model: Границы ответственности все довольно внятно расписано. Достоинства и недостатки каждого подхода.
Ответ написан
FanKiLL
@FanKiLL
Давно не пишу на asp.net mvc но в своё время использовал ViewModel.
К примеру у вас есть класс User у которого кроме прочих переменных есть переменная active которое может быть true/false, тобишь активный юзер или нет, допустим у вас есть форма регистрации юзера, но вы не хотите светить эту переменную. Использовать модель User не безопасно, так как это поле всё равно можно будет заполнить и при мапинге формы на модель это переменная заполнится, есть два решения.
1)public ActionResult registration([Bind(Exclude = «active»)] User model)
Так при мапинге данных формы на модель поле active проигнорируется.
2)public ActionResult registration(UserViewModel model)
UserViewModel будет точно такая же как и User класс, кроме поля active, таким образом поле active из формы вообще никогда не прийдёт.

Повторюсь, я давно не писал на asp.net mvc, так что может кто что дополнит или поправит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы