【发布时间】:2011-03-06 01:18:31
【问题描述】:
对于S#arp Architecture,我的理解是,对一种以上类型的实体进行操作的域逻辑(也称为业务逻辑)最好由应用程序服务层处理。
因此,应用程序服务中的类将需要访问存储库。大概然后您通过构造函数注入存储库。因为每个实体类型都有一类存储库,所以任何相当现实的任务都需要访问多个存储库。所以你可能有一个如下所示的应用程序服务类:
public class DogTasks
{
public DogTasks(IRepository<Dog> dogRepository,
IRepository<Trick> trickRepository,
IRepository<DogTrick> dogTrickRepository,
IRepository<Lesson> lessonRepository)
{
// etc
}
public void TeachDogNewTrickAtALesson(int dogID, string trickName, int lessonID)
{
// etc
}
// other methods, etc
}
然后可以将这个Tasks 类注入到相关的控制器中。
到目前为止,我想我明白了。但我对以下情况感到不安:
-
1234563一个全新的班级。向构造函数添加参数会扰乱许多单元测试,但增加新类似乎也不是一件好事。
当控制器需要执行简单的存储库操作(如
get)时,将存储库注入控制器以及应用程序服务类是有意义的。但后来我得到了同样的“改变构造函数参数”的问题。另一种选择似乎是只让 Application Services 层与 Repositories 一起玩,但随后您会在 Application Services 中添加大量样板代码来做非常简单的事情。
这些事情让我觉得我可能做错了。那么应该如何组织一个好的应用服务层呢?
例如你有很多班级,每个班级只做一项任务吗?或者你是否沿着实体线将相关任务聚集在一起?您如何处理需要大量存储库的任务?需要大量存储库来完成一项任务是否意味着该回到绘图板了?
【问题讨论】:
标签: asp.net-mvc business-logic s#arp-architecture