领域驱动设计-软件中所表示的模型

2021-09-12  本文已影响0人  东南枝下
图片.png

模式:ENTITY(又称为REFERENCE OBJECT)
用来表示某种具有连续性和标识的事物(可以跟踪它所经历的不同状态,甚至可以跨不同的实现跟踪它)
当一个对象由其标识(而不是属性)区分时,那么在模型中应该主要通过标识来确定该对象的定义。
在定义标识操作时,要确保这种操作为每个对象生成唯一的结果
模型必须定义出“符合什么条件才算是相同的事物”
ENTITY最基本的职责是确保连续性,以便使其行为更清楚且可预测
设计标识操作

每个ENTITY都必须有一种建立标识的操作方式,以便与其他对象区分开,即使这些对象与它具有相同的描述属性。不管系统是如何定义的,都必须确保标识属性在系统中是唯一的,即使是在分布式系统中,或者对象已被归档,也必须确保标识的唯一性

ID通常是由系统自动生成的。
当自动生成ID时,用户可能永远不需要看到它。ID可能只是在内部需要。

ddd中的ENTITY在一些地方又被称之为DO(DoMain Object)

模式:VALUE OBJECT
很多对象没有概念上的标识,它们描述了一个事物的某种特征

模式:SERVICE
重要的领域操作,一些活动或动作不是Entity和VO的自然职责时,声明一个SERVICE作为独立接口的操作。所谓SERVICE,强调的是与其他对象的关系,它应该是一个“动词”而非“名词”,因此,SERVICE应是无状态的。
其他功能:控制领域层中的接口的粒度,并且避免客户端与ENTITY和VALUE OBJECT耦合

模式:MODULE(也称为PACKAGE)

MODULE之间应该是低耦合的,而在MODULE的内部则是高内聚的。
MODULE并不仅仅是代码的划分,而且也是概念的划分。

MODULE为人们提供了两种观察模型的方式,
一是可以在MODULE中查看细节,而不会被整个模型淹没,
二是观察MODULE之间的关系,而不考虑其内部细节

MODULE的选择应该取决于被划分到模块中的对象的意义。当你将一些类放到MODULE中时,相当于告诉下一位看到你的设计的开发人员要把这些类放在一起考虑。

MODULE的名称应该是UBIQUITOUS LANGUAGE中的术语。MODULE及其名称应反映出领域的深层知识。

MODULE需要与模型的其他部分一同演变。MODULE的重构必须与模型和代码一起进行。

上一篇下一篇

猜你喜欢

热点阅读