1)什么是BLL-services?它们与Service Layer服务有什么不同?哪些转到域服务,哪些转到服务层?
2)为什么我重构BBL模型来赋予它一种行为:Post实体拥有一个反馈集合,这使得通过feedbacks.Add(feedback)添加另一个Feedback成为可能。显然,在一个普通的博客应用程序中没有计算。我应该定义一个在Post实体中添加Feedback的方法吗?或者,这种行为是否应该由相应的服务来管理?
3)我应该像http://www.amazon.com/Professional-ASP-NET-Design-Patterns-Millett/dp/0470292784中描述的那样使用Unit-Of-Work (和UnitOfWork-Repositories)模式,还是使用NHibernate ISession就足够了
发布于 2012-01-10 22:00:10
发布于 2012-01-10 22:03:11
1) Business Layer和Service Layer实际上是同义词。“官方”DDD术语是Application Layer。
Application Layer的作用是协调Domain Services和Domain Model之间的工作。例如,这可能意味着应用程序函数首先通过Repository加载实体,然后在实体上调用将执行实际工作的方法。
2)有时,当您的应用程序主要是数据驱动的时候,构建一个功能齐全的Domain Model可能看起来有点夸张。然而,在我看来,当你习惯了Domain Model,这是你唯一想要的方式。
对于Post和Feedback,您从一开始就需要一个AddFeedback(Feedback)方法,因为它减少了耦合(例如,您不必知道FeedBack项是存储在List中还是存储在Hashtable中),并且它将为您提供一个很好的扩展点。如果您想要添加一个检查,即不允许超过10个Feedback项目,该怎么办?如果您有一个AddFeedback方法,您可以很容易地在一个点上添加检查。
3) UnitOfWork和Repository模式是DDD的基础部分。我不是NHibernate专家,但是在接口后面隐藏特定于基础设施的细节总是一个好主意。这将减少耦合性并提高可测试性。
发布于 2012-01-11 02:31:24
我建议您首先阅读DDD书籍或its short version,以便对DDD的构建块有一个基本的理解。没有BLL服务或服务层服务这样的东西。在DDD中,你有
在所有这些层中都可以有服务。服务只是向许多其他对象提供行为,它没有状态。例如,域层服务是您放置不属于任何特定领域实体和/或许多其他对象所需的内聚业务行为的地方。它提供的操作的输入和输出通常是域对象。
无论如何,无论何时,只要从领域的角度来看,一个操作看起来非常适合一个实体(比如向post添加反馈,这将转换为Post.AddFeedback()或Post.Feedbacks.Add()),我总是会去做,而不是添加一个只会分散不同位置的行为并逐渐导致领域模型乏力的服务。可能会有例外,比如向帖子添加反馈需要在许多不同的对象之间建立连接,但这里显然不是这样。
https://stackoverflow.com/questions/8804281
复制相似问题