在DDD中,表示层可以同时使用Repository和Service类吗?

时间:2011-01-01 11:06:38

标签: web-applications architecture domain-driven-design

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

这似乎不对。有人可以为我澄清一下吗?

2 个答案:

答案 0 :(得分:3)

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

应用服务是facades。糟糕的外观会增加复杂性,而不是它的结果。像这样:

public int Increment(int v){ v=v+1;return v;}

除非它足够解决复杂性或者您明确希望所有内容都要经过额外的层以便尽可能地分离客户端 - 这是无用的。

就个人而言,我只是将这些内容粘贴在控制器中(如果使用MVC模式):

public ActionResult ViewBlogPost(int id){
  //I like to name repositories as collections
  var blog=_blogs.Find(id);

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

答案 1 :(得分:0)

为了获得“层纯度” - 是的,这就是做到这一点的方法。但是您可以轻松避免使用冗余代码。制作定义所有常用方法的BaseService(例如save(..)update(..)delete(..))。其他更复杂的方法可能(并且应该)需要与域对象进行一些交互。

顺便说一句,有时假设在DDD中,从域对象中访问存储库层。虽然我认为这是错误的,但有时也是如此。如果这也是你的情况,那么它是service > domain object > repository,并且没有“快捷方式”