Какова лучшая структура уровня обслуживания в ASP. NET Базовом приложении? - PullRequest
0 голосов
/ 04 апреля 2020

Я работаю с ASP. NET Core MVC с некоторого времени, и я сталкиваюсь с огромной проблемой с организацией моего кода на сервисном уровне. В некоторых приложениях сервисы используются друг в друге (что, по моему мнению, может вызвать проблемы циклической зависимости), но в других сервисы внедряют только контекст БД и ничего больше (что я считаю лучше, потому что оно следует принципу separation of concerns ). Также другая проблема - когда действие должно выполнять несколько операций, например, сохранить стажировку для группы, а затем назначить всех текущих членов группы для этой стажировки. Если logi c разделен на InternshipService и GroupService, и они вызываются в некотором действии InternshipsController, например:

  this.internshipService.Add(someInternshipDto);
  var members = this.groupService.GetAllMembers();
  this.internshipService.AssignGroupMembers(members);

Если AssignGroupMembers по какой-то причине не удается, мы будет иметь противоречивые данные в нашей базе данных. Одно из решений проблемы - просто переместить все логи c в InternshipsService, выполнить все необходимые операции и, наконец, вызвать SaveChanges(), но это нарушит принцип separation of concerns.

Я довольно смущен этим, поэтому, пожалуйста, скажите мне, что вы делаете, чтобы решить эти проблемы!

1 Ответ

0 голосов
/ 04 апреля 2020

Я думаю, что вы смешиваете проблемы (1) бизнес-логики c и (2) сохранения данных. У вас может быть служба для обработки logi c и универсальный репозиторий c (т.е. DbContext) для обработки данных.

Например:

this.repository.Add<Internship>(someInternshipDto); // data
var members = this.repository.GetAll<Member>(); // data
this.service.AssignGroupMembers(members); // logic
this.repository.SaveChanges(); // data
...