Рекомендации по шаблону репозитория с MVC3 & EF - PullRequest
3 голосов
/ 30 августа 2011

У меня была дискуссия с другим разработчиком о шаблоне репозитория с mvc3 и EF, который привел меня в замешательство.

Я не уверен, что лучше всего следовать шаблону хранилища с MVC3 и EF.

Допустим, у меня есть таблица с названием Product, содержащая ProductID и ProductName. Я создаю свою новую модель EF. Я также создаю базовую модель ProductModel

public int ProductID{get;set:}
public string ProductName{get;set}

Должен ли мой контроллер знать что-либо о моей сущности, созданной EF? или я собираюсь делать все мои разговоры с EF внутри моего хранилища?

например. Основной пост

[HttpPost]
public ActionResult Product(ProductModel model)

Затем в моем контроллере я передаю модель в свой репозиторий, чтобы позаботиться о вставке, или если мой контроллер должен быть привязан непосредственно к моей модели продукта EF, а затем передаю ее в мой репозиторий, чтобы заботиться о вставке. *

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

Какая лучшая практика?

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

Если вы захотите stripe out the entity framework через некоторое время без смены контроллера, вам нужно использовать шаблон хранилища для отделения логики персистентности от пользовательского интерфейса.

И дополнительно не используйте классы моделей в качестве вида models для слоя MVC. Вы можете использовать отдельные модели видов для логики пользовательского интерфейса и использовать что-то вроде AutoMapper (http://automapper.codeplex.com/) для сопоставления с классами моделей.

1 голос
/ 30 августа 2011

Ваш последний абзац прекрасно подводит итог.

Вы хотели бы использовать интерфейсную разработку , чтобы ваш контроллер справился с IProductRepository.

Использование внедрения зависимостей для внедрения конкретного хранилища Entity Framework в Контроллер.

Как упоминает @Jayantha, ваше действие [HttpPost] должно принимать модель представления, а не модель EF.

Затем используйте AutoMapper для сопоставления между ViewModel и моделью EF.

Хранилище будет оборачивать логику EF в одном месте (Сохранить, Удалить, Обновить и т. Д.), Поэтому ваш контроллер останется простым и тупым.

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

0 голосов
/ 06 сентября 2011

Я предпочитаю использовать Dev Magic Fake, с Dev Magic Fake вам не нужно использовать EF или рассматривать что-либо, вам просто нужно добавить ссылку на сборку Dev Magic Fake и начать использовать магические методы

[HttpPost]
public ActionResult Product(ProductModel model)
{
   var repoistory = new FakeRepository<ProductModel>();
   repoistory.Save(ProductModel);

Для получения дополнительной информации см. Dev Magic Fake на CodePlex

http://devmagicfake.codeplex.com

Спасибо M.Radwan

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