领域对象/服务和业务逻辑层

41

什么是软件架构中的领域对象和领域服务?我不熟悉它们,也不知道它们与业务逻辑层有何不同?

4个回答

84
不同的人在使用这些术语时会有略微不同的含义,但这是我的理解: 1) "业务"和"领域"大致是同义词。"领域"更为通用,因为它不会假定你正在编写业务应用程序。因此,如果我们正在编写科学应用程序或游戏,我们可能更愿意将代码的相关部分称为"领域"而不是"业务"。因此,在本说明的其余部分中,我将使用"领域",因为它更为通用。 2) "领域逻辑"包括"领域对象"和"领域服务"。基于各种原因(技术和其他原因),许多架构采用一种设计,其中领域逻辑被划分为存储数据的对象("领域对象")和操作这些对象的对象("领域服务")。Martin Fowler和其他人指出这并不是非常面向对象,因为面向对象的一个重要概念是将功能与数据结合在一起,这是正确的,但事实就是如此。领域对象是数据,领域服务是处理数据的部分。 3) 在领域驱动设计中,想法是回归真正的面向对象设计,因此各种服务方法回到领域对象,以便你有对象在面向对象的意义上,而不是有时被称为"贫血"对象。在DDD中,领域对象本身更加健壮,因此它们形成领域逻辑。实际上可能仍然存在一些领域服务,但这通常比传统的领域对象与服务模型中小得多。

@Willie Wheeler,哪些内容应该放入领域对象中,哪些应该放在领域服务中? 我是MVC的新手。 - Jo Smo
请重新阅读上面的第2点和第3点。贫血业务对象实现起来更简单,但可以说不太符合面向对象的精神。 - user41871
@WillieWheeler 嘿,我是Java的新手,正在尝试学习如何正确构建bean/Java领域对象。假设我有一条龙,它可以有多个类(角色)。 (例如,一条龙可以是追踪器,同时也可以是攻击者。)我计划在我的主页上显示龙的类,当您单击一个类时,它将向您显示该类下的龙列表,但出于某种原因,我发现很难想出正确的结构来完成这项工作。 - Wax
@Carnal 一个可用的答案无法放在评论中。我建议你在http://programmers.stackexchange.com/上创建一个实际的问题。 - user41871
@THISUSERNEEDSHELP 同意。 - user41871
显示剩余2条评论

3

业务逻辑层也称为领域层。它是处理所有业务逻辑的层/层。

领域对象和领域服务是用于构建您的领域层的类。


我认为业务逻辑层和领域层是不同的。我正在阅读Oreilly的Java最佳实践,我看到了这样一句话:如果您的应用程序自然地分为标准层(持久性、领域对象、业务逻辑、表示层),则应考虑使用EJB。那么领域/业务逻辑之间有什么区别呢? - aces.
这取决于您选择在应用程序中构建多少层。您可能只有两层应用程序,也可能有多达六七个不同的层。 - Jørn E. Angeltveit
1
DDD是一个应用于领域复杂的方法。它专注于核心领域逻辑和建立复杂业务模型的过程(即程序员和领域专家之间的协作)。领域逻辑指的是通用的业务规则,而领域对象代表涉及到该领域逻辑的各种真实业务对象(例如人员、贷款、投资者)。 - Jørn E. Angeltveit
@JørnE.Angeltveit 这是处理所有业务逻辑的层/层次 - 层和层次是不同的术语。层是应用程序的逻辑分离,而层次是系统组件的物理分离。 - Nikhil Vartak
1
@niks:说得好。我非常注重术语的准确性,但据我所知,即使你记住这个区别,这句话仍然有意义吧? - Jørn E. Angeltveit
显示剩余2条评论

1
我们需要了解应用层和领域(业务)层的职责才能掌握它们之间的区别。 领域层代表业务对象,主要是业务实体,可能在某种程度上进行抽象,并提供领域服务。当业务发生变化或领域内的上下文发生变化时,领域层才会发生改变。 应用层“存在于”领域层之上,并且通常(最好)与领域层分离,例如在asp.net MVC Web应用程序中,控制器部分就是应用层,HTML部分就是表示层。应用层会根据特定应用程序(或服务、API、应用等)的目的而发生变化。

0
让我举一个企业应用场景的例子,来解释为什么领域层和业务层都包含业务逻辑但是不同。
假设我有一个COTS产品,它是一个纯粹的案例管理引擎,比如OMG CMMN实现。在业务层中有大量的业务逻辑,它与数据层中的一堆实体一起工作。
现在继续假设我有两个客户是系统集成商,一个正在构建法律案件管理系统,另一个想要医疗保健案件管理。两者都是案件管理,但有自己的领域术语、对象、程序、行业架构等。
每个客户都会添加自己的领域层,以便他们可以使用各自业务领域的术语和概念进行工作。
所以,是的,它包含业务逻辑,但领域层是一种将通用可重用业务与特定业务封装在一起的方式。
“越简单”的应用程序,领域模型和数据模型就越相似,业务逻辑和领域逻辑也越相似。但当你增加组件的“实用性”时,关注点最终会分离。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接