2012-01-20 114 views

回答

8

就个人而言,我不喜欢看到的控制器库,或在一般的表示层。但我已经看过很多次,在DDD的背景下没有任何问题。

我认为答案是,这取决于你的项目到底有多大。服务层更常见于更复杂的项目中。而简单的MVC网站,例如直接使用存储库。

+1

“我不喜欢在控制器中看到存储库”=>您能详细说明为什么以及在控制器和存储库之间添加什么中间层? – guillaume31

+1

控制器往往会很快膨胀。其中一个原因是因为开发人员最终将控制器中的业务逻辑强加于人。业务逻辑应该只存在于领域层,然后在服务层 - 不在控制器中,而不在存储库中。通过在你的控制器中使用(应用)服务,你可以避免这种情况。因此,例如,您可以调用accountService.GetUserByEmail(email)或catalogueService.GetProductViewModel。您的控制器保持良好和精益,您的应用程序服务会协调与各种存储库进行交谈。 – autonomatt

+3

仅仅因为您从存储库获取对象并不意味着您处理业务逻辑。这只是*从域图层中获取对象以在另一图层中使用。我看不到单行userRepository.GetUserByEmail(email)比accountService.GetUserByEmail(email)更多的控制器。 – guillaume31

2

或者,我可以直接使用存储库来获得一个域对象?

你绝对可以。这正是存储库的目标。我想知道你会用什么样的服务(除了在SOA或基于Web服务的体系结构的特定上下文中)。

+0

我的(打算)的问题是,如果我可以绕过服务并直接从存储库获取域实体(例如在MVC控制器中) – jgauffin

+0

嗯,我说得对,答案是肯定的:)看到某种被认为完美的东西很有趣正常和普通,如果你看看原来的DDD书籍和运动现在似乎吓唬人... – guillaume31

+0

我不害怕。我只是想知道最佳做法是什么。这本书于九年前发布,从那时起可能会发生一两件事情。 – jgauffin

0

完成我的第一个项目使用DDD原则结构后:d,我发现它是有用的两个域名服务和可用于应用层消耗库。

关键要点:如果您使用该架构,应用层可能是您的WCF服务或Web服务中的代码。这一切都取决于你的实施。如果它适合您的实现,那么您的应用程序层可能与您的表示层相同,因此在您的控制器或Web窗体代码中有应用程序层代码。

存储库功能类似于内存中的集合。对于应用程序层,代码应该看起来像只使用任何旧集合。

域服务的功能更像是一个永远不会被更新,也许处理,但不会直接更新处理器或存取信息。对于应用程序层,代码应该看起来像只使用任何旧的Web服务。

话虽这么说,我会更多地解释了一些例子:

我的仓库其实从我创建了一个实现对象类型的泛型集合继承,封装数据库键和业务一起模型。使用这种方法,我可以在我的接口,如

BusinessObject this[int index]; 

定义的索引,我可以有一个getter,将返回基于底层集合的索引和二传手的业务对象,将查找数据的关键从底层收集并将该对象保存到数据库。这使得应用程序的代码非常简单,例如

IBusinessObjectRepository repository = new SqlBusinessObjectRepository(sqlString); 
BusinessObject obj = repository[0]; //Get first object in the list. 
//Make some changes to the business object by setting properties or calling methods to process business logic. 
repository[0] = obj; //Save the object back to the database. 

服务

我用服务来检索,我不会单独编辑实体和值对象的名单,并在我的情况,是仅在调用聚合根上的方法时用作可用选项或值。通常,我将这些信息缓存在Web服务器上。这不是域服务的唯一用途,只是我的例子。应用层代码仍然相对简单。

IBusinessService service = new ImplBusinessService(implementationArgs); 
List<BusinessObject> objsToCache = service.GetBusinessObjects(); 
//cache the objects on the web server. 

总之,根据我对DDD原则的理解,应用程序层应该能够从服务或存储库访问业务对象。它们之间的选择归结为域模型中最适合的选择。

相关问题