我使用ASP.NET Core MVC已经有一段时间了,在服务层组织代码时遇到了一个巨大的问题。在一些应用程序中,服务是相互使用的(根据我的说法,这可能会导致循环依赖性问题(,但在另一些应用程序,服务只注入db上下文,而不注入其他内容(我认为这更好,因为它遵循separation of concerns
主体(。另一个问题是,当一个操作应该执行多个操作时,例如,保存一个组的实习,然后将所有当前组成员分配给该实习。如果逻辑被分离为InternshipService
和GroupService
,并且它们在InternshipsController
的某些操作中被调用,如下所示:
this.internshipService.Add(someInternshipDto);
var members = this.groupService.GetAllMembers();
this.internshipService.AssignGroupMembers(members);
如果AssignGroupMembers
由于某种原因失败,我们的数据库中会有不一致的数据。这个问题的一个解决方案就是移动InternshipsService
中的所有逻辑,完成我需要的所有操作,最后调用SaveChanges()
,但这会破坏separation of concerns
的主体。
我对此很困惑,所以请告诉我,为了解决这些问题,你做了哪些事情!
我认为您混合了(1(业务逻辑和(2(数据持久性的关注点。您可以有一个处理逻辑的服务,以及一个处理数据的通用存储库(即DbContext
(。
例如:
this.repository.Add<Internship>(someInternshipDto); // data
var members = this.repository.GetAll<Member>(); // data
this.service.AssignGroupMembers(members); // logic
this.repository.SaveChanges(); // data