领域驱动设计-学习笔记 实体
对象建模倾向于引导我们将精力集中于对象的属性上。但是实体的基本概念就是一种抽象的连续性。这种连续性贯穿了对象的整个生命周期,甚至要经历多种实现形式。
有些对象并不主要由它们的属性来定义的,它们体现了标识在时间上的延续性,甚至经常要经历多种不同的形态。有时,一个对象与另外一个对象有着不同的属性,但它们是互相匹配的;有时,一个对象与其他对象有着相同的属性,但它必须能跟那些对象区分开来。弄错对象标识会导致数据破坏。
以标识作为其基本定义的对象称为“实体”。实体的类定义、职责、属性、关联都是围绕着它是谁进行考虑的,而不考虑它有那些特定的属性。即使实体并不会发生很大的变化,或者生命周期并不复杂,我们仍应该根据语义将它归类为实体,这样可以得到更清晰的模型和更健壮的实现。
在特定的软件系统之外,比如银行交易、房子出租等等,标识也有着同样的重要意义。但是,有些标识只有在特定的上下文中才有意义。
如果一个对象是通过标识而不是属性来确定的,那么就在模型中把标识作为这个对象定义的基本要素。保持类的定义简单明了,并着重考虑其生命周期中的连续性和唯一性。定义对象的方法能够把每个不同的对象区分开来,而无需考虑它的形态和历史。对那些需要通过属性比较来匹配对象的情况进行警惕。确保生成标识的操作能够为每一个对象产生一个唯一的结果,这可以通过在标识中附加一个具有唯一性保证的符号来实现。生成的标识可能来自外界,也可能是由使用这些标识的系统随机产生的;不管是使用什么方法,标识必须满足其在模型中所具有的唯一性。模型必须对“怎么是同一个事物”的具体含义作出定义。
标识并不是现实实体所固有的,它之所以意义重大,是因为它非常有用。事实上,现实世界中的同一个事物在领域模型中有可能表示为实体,也有可能不表示为实体。