Web applications 在DDD中,表示层可以同时使用存储库和服务类吗?

Web applications 在DDD中,表示层可以同时使用存储库和服务类吗?,web-applications,architecture,domain-driven-design,Web Applications,Architecture,Domain Driven Design,如果表示层只应该使用服务,那么服务类必须公开存储库已经实现的相同方法,以使它们对表示层可用 这似乎是错误的。有人能帮我澄清一下吗?我敢打赌,这似乎是错误的,因为您实际上不需要这种抽象级别 应用程序服务是。坏门面是一个增加了比它解决的更复杂的门面。大概是这样的: public int Increment(int v){ v=v+1;return v;} 除非它解决了足够的复杂性,或者您明确希望所有内容都经过附加层,以便尽可能地解耦客户机,否则它是无用的 就我个人而言,我会把这些东西放在contr

如果表示层只应该使用服务,那么服务类必须公开存储库已经实现的相同方法,以使它们对表示层可用


这似乎是错误的。有人能帮我澄清一下吗?

我敢打赌,这似乎是错误的,因为您实际上不需要这种抽象级别

应用程序服务是。坏门面是一个增加了比它解决的更复杂的门面。大概是这样的:

public int Increment(int v){ v=v+1;return v;}
除非它解决了足够的复杂性,或者您明确希望所有内容都经过附加层,以便尽可能地解耦客户机,否则它是无用的

就我个人而言,我会把这些东西放在controller中(如果使用MVC模式):

为了达到“层纯度”-是的,这就是方法。但是您可以很容易地避免大量冗余代码。创建一个定义所有常用方法的
BaseService
(如
save(…)
update(…)
delete(…)
)。其他更复杂的方法可能(也应该)需要与域对象进行一些交互


顺便说一句,有时假设在DDD中,存储库层是从域对象内部访问的。虽然我认为这是错误的,但有时确实如此。如果这也是您的情况,那么它就是
服务>域对象>存储库
,并且不可能有“快捷方式”

我们在谈论多少层?您负责开发哪些应用程序?我正在开发整个应用程序。为了给你一个想法,让我们来谈谈一个UI,它在加载一篇博客文章时,会增加它的浏览量。我的存储库将为我提供blog实体,我的服务将增加计数。如果我的UI应该只与服务交互,那么该服务将必须公开一个方法,该方法反过来调用我的存储库来获取博客。那么,UI直接从存储库而不是从服务中获取博客实体是否正确?这是否意味着您将一起避免域服务?@我说的是应用程序服务。域服务是不同的东西。但,是的,我试图避免域服务,因为对域服务的需求是模型缺乏聚合根的标志。
public ActionResult ViewBlogPost(int id){
  //I like to name repositories as collections
  var blog=_blogs.Find(id);

  blog.IsBeingViewedBy(_currentViewer); 
  return View(blog);
}