EF6 (первый код), MVC, Unity и сервисный уровень без репозитория

asp.net asp.net-mvc entity-framework entity-framework-6

Вопрос

Мое приложение использует SQL Server 2012, EF6, MVC и Web API.

Он также использует репозиторий и различные файлы, такие как:

DatabaseFactory.cs
Disposable.cs
IDatabaseFactory.cs
IRepository.cs
IUnitOfWork.cs
RepositoryBase.cs
UnitOfWork.cs

Мы уже используем сервисный уровень между нашими контроллерами и хранилищем для некоторой сложной бизнес-логики. У нас нет планов, КОГДА-ЛИБО, чтобы перейти на другую базу данных, и мне было указано, что недавнее мышление состоит в том, что EF6 является репозиторием, поэтому зачем строить другой репозиторий поверх него и почему у меня есть все файлы, которые у меня выше .

Я начинаю думать, что это разумный подход.

Кто-нибудь знает о каких-либо примерах, которые реализуют EF6 без репозитория со слоем сервиса . Мой поиск в Интернете показал множество сложных примеров кода, которые кажутся сложными без всякой причины.

Моя проблема также заключается в том, что при использовании уровня сервиса, где я помещаю:

context = new EFDbContext()

В контроллере уровень обслуживания или оба? Я читал, что могу сделать это с помощью инъекции зависимости. Я уже использую Unity как МОК, но я не знаю, как это сделать.

Популярные ответы

Entity Framework Является уже реализацией шаблона Unit of Work, а также общей реализацией репозитория (DbContext - это UoW, а DbSet - это общий репозиторий). И я согласен с тем, что в большинстве приложений это слишком сложно, чтобы создать еще один UoW или общий репозиторий (кроме того, GenericRepsitory считается некоторым анти-шаблоном).

Уровень сервиса может выступать в качестве конкретного репозитория, который имеет множество преимуществ для инкапсуляции логики данных, характерной для ваших бизнес-потребностей. Если вы используете это, тогда вам не нужно создавать репозиторий поверх него (если вы не хотите менять свою техническую поддержку, скажем, из WCF в WebApi или что-то еще ...)

Я бы поместил весь ваш доступ к данным в ваш сервисный уровень. Не делайте доступ к данным в своем контроллере. Это утечка вашего слоя данных в ваш слой пользовательского интерфейса, и это просто плохой дизайн. Это нарушает многие основные концепции SOLID.

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



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему