0

Я занимаюсь mvc в течение некоторого времени, но это мой первый контакт с DI.MVC - Лучший шаблон (UoW + Repositories + Services + DI)

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

Я понимаю, что:

  • Хранилища - Абстрактный слой для взаимодействия с EF/MongoDB/XML/Безотносительно может представлять собой базу данных (CRUD операций)
  • UOW - Набор операций которые коррелируют вместе, он может использовать N хранилища для выполнения задач, которые будут использоваться в Контроллеры
  • Услуги Я действительно не понимаю это, кажется, еще один шаг, поскольку он использует несколько UoW для выполнения «дополнительных задач»? Я потерялся в этом.

Хорошо, что мне потребовалось некоторое время, чтобы «съесть» в Repository вещь, так как я предпочитаю, чтобы передать EF Контекст ринв UOW.

Это нормально, если я забуду Репозиторий и просто использую контекст? Или он используется для любой задачи Unit Test?

Что такое Служба обслуживания? Поскольку я могу выполнять все действия/задачи внутри UoW, а затем вызывать его внутри контроллеров.

Есть ли лучший набор шаблонов для использования?

+0

Первичный opinon основе, голосуйте, чтобы закрыть – Liam

+0

Возражение. Это не мнение основано, есть только одно истинное правильное утверждение об этом. Он может содержать несколько «почти правильных» утверждений. Какая польза для stackoverflow, если вы не запрашиваете лучший способ реализации. Его не все о коде –

+0

Возможно, было бы неплохо пропустить всю «службу» и перейти непосредственно к [обработчикам] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91). – Steven

ответ

1

Поскольку они очень распространены, и вы могли бы говорить ни о, я собираюсь дать краткое объяснение о каждом.

Доменные службы: Когда у вас есть сущность, и вы начинаете вставлять в нее логику, вы можете добраться до точки, в которой часть логики действительно не принадлежит этому объекту, поэтому вы создаете доменную службу для отвлеките эту логику. Примером может быть:

public class Shipment 
{ 
    ... 
    public void CalculateFee(IFeeCalculatorService feeCalculatorService) 
    { 
     ... Any additional and entity relevant logic for fee calculation can be here as well. 
     this.Fee = feeCalculatorService.Calculate(); 
    } 
    ... 
} 

Применение Услуги: Это те услуги, которые вы будете требующие от контроллеров для инкапсуляции операций, необходимых для выполнения конкретной задачи. Допустим, у вас есть контроллер, чтобы получить одобрение или отказ от запроса на дружбу.Ваша служба Заявки должны получить достаточно данных, чтобы иметь возможность:

  • Найти доменный объект запроса дружбы
  • Позвоните его одобрить или отклонить метод
  • вызова методов упорствовать, что изменения в базу данных
  • Возвращайтесь соответствующую информацию в контроллер

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

+0

Хорошо, это похоже на то, что я искал, когда я просил услуги. –

1

EFs DBContext уже реализует шаблоны UoW и репозитория, поэтому yiu не имеет преимущества для их реализации в собственном коде yiur.

служба позволяет абстрагировать бизнес-логику, поэтому он может быть использован повторно

+0

Хорошо, я вижу, поэтому мне просто нужно использовать Службы? Я использую UoW, как если бы это был уровень сервиса. –

+0

Будьте осторожны, чтобы описать в целом, что «не имеет никакой пользы», чтобы использовать UoW поверх того, что поставляется EF. Все зависит от контекста. Мне часто кажется, что это очень полезно для предотвращения того, что код моего приложения имеет зависимость от EF (как предписывает [DIP] (https://en.wikipedia.org/wiki/Dependency_inversion_principle)), и я использую репозитории и подразделение работы для этого. – Steven

+1

@Steven Я повторяю, что люди внедряют полупеченные образцы UoW и репозитория поверх EF без какой-либо веской причины, потому что «вот как вы это делаете». Так что да, если вам нужно прочитать эту тему, у вас нет никакой пользы от них. Напротив, ваши собственные реализации, вероятно, сделают это более сложным ** для вас, чтобы использовать то, что EF уже предоставляет бесплатно. –

 Смежные вопросы

  • Нет связанных вопросов^_^