领域驱动设计之体会二

时间:2023-04-25 08:42:32 心得体会 我要投稿
  • 相关推荐

领域驱动设计之体会二

领域驱动设计之体会二2011-02-25 23:25领域驱动设计中分别用实体、值对象和服务来表示模型。其中所谓实体是具有唯一性的对象。在建模中,应该尽早识别出实体。而值对象与实体恰恰相反,它不具有唯一性,其目的是为了减少建立实体的开销。值对象为了描述领域的特殊方面,我们只关心它的属性,而不关心其唯一性。有些领域中的动作,它们是一些动词,看上去却不属于任何对象。通常这样的行为是跨越多个对象的。我们将这样的行为,显示的声明为服务。在领域中,不应该为每一个需要的操作来建立一个服务。但是当一个操作凸显为一个领域中的重要概念时,就需要为它建立一个服务了。以下是服务的三个特征:

1.服务执行的操作涉及一个领域概念,这个领域概念通常不属于一个实体或者值对象。

2.被执行的操作涉及到领域中的其他对象。

3.操作是无状态的。

需要注意的是,我们应该严格区分领域层的服务和基础设施层的服务。设计时要确保领域层保持从其他层中隔离开来。

为了降低模型的复杂性,便于系统并行开发,领域驱动中也有模块的概念。通过把整个系统分割为不同的模块,来提高代码的质量,增进内聚,消除耦合。模块应该具有良好的接口,通过这些接口为其他模块提供服务。

聚合、工厂和资源库都与管理领域对象的生命周期相关。

聚合通过一个作为根的实体来访问其他属性,用以保持数据的一致性。根是外部可以访问的唯一对象。聚合是用来定义对象所有权和边界的领域模式。我们通常不追求模型的完整性,而是让它们尽量地简单和容易理解。聚合通过唯一的根实体,建立边界将内部和外部的对象划分开来。然而实际使用中,根实体的构造函数往往会很大很复杂。当对象的每个客户程序持有关于对象构建的专有知识时,就意味着领域对象和聚合的封装被破坏了。我们可以利用工厂来完成封装复杂的对象创建过程。一种工厂是给聚合的根增加一个方法,这个方法用来创建对象,强化所有不变量,返回创建对象的引用或者拷贝。更好的方法是创建一个专用工厂类,这样可以保持对象的简单,不会造成复杂的构建逻辑的混乱。以下情况不需要创建工厂:

1.构造过程并不复杂;

2.对象的创建不涉及到其他对象的创建,所有的属性需要传递给构造函数。

3.客户程序对实现很感兴趣,可能希望选择使用策略模式。

4.类是特定的类型,不涉及到继承,所以不用在一系列的具体实现中进行选择。

资源库的目的是封装所有获取对象引用所需的逻辑。工厂和资源库都是模型驱动设计中的模式。工厂关注的是对象的创建,而资源库关心的是已经存在的对象。需要注意:工厂是"纯领域"的,而资源库会包含对基础设施的连接。

领域驱动设计是软件设计的方法论,从思想到结构,阐述了软件分析设计思路和方法。对我们的实际工作很有借鉴意义。

以上是对领域驱动设计的一点体会,实践是最好的老师,把理论融入实践中,并取得成果,其乐无穷啊。就拿以前看一些经典源代码,有的类被命名为XXXRepository,我就很不理解这样命名的目的,学习了领域驱动设计,便知道了作者的用心。

【领域驱动设计之体会二】相关文章:

经典的领域驱动设计在代码实践方面的心得体会04-28

活动设计科学领域教案08-26

活动设计健康领域教案12-19

幼儿活动设计健康领域教案02-16

活动设计健康领域教案7篇12-20

活动设计健康领域教案(7篇)12-24

静坐之体会04-27

名片的设计之电子教案04-28

秋风之劲(二)04-27

健康领域心得体会02-20