The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ 实体 ]

有一类对象看上去好像拥有标识符,它的标识符在历经软件的各种状态后仍能保持一致。对这些对象来
讲这已经不再是它们关心的属性,这意味着能够跨越系统的生命周期甚至能超越软件系统的一系列的延
续性
和标识符。我们把这样的对象称为实体。

OOP 语言会把对象的实例放于内存,它们对每个对象会保持一个对象引用或者是记录一个对象地址。在给
定的某个时刻,这种引用对每一个对象而言是唯一的,但是很难保证在不确定的某个时间段它也是如此。实
际上恰恰相反。对象经常被移出或者移回内存,它被序列化后在网络上传输,然后在另一端被重新建立,或
者它们都被消除。在程序的运行环境中,那个看起来像标识符的引用关系其实并不是我们在谈论的标识符。

一个对象必须与其他的对象区分开来,即使是它们拥有着相同的属性。错误的标识符可能会导致数据混乱。

因此,在软件中实现实体意味着创建标识符。通常标识符或是对象的一个属性(或属性的组合),一个专门为
保存和表现标识符而创建的属性,也或是一种行为。对两个拥有不同标识符的对象来说,能用系统轻易地把它
们区分开来,或者两个使用了相同标识符的对象能被系统看成是相同的,这些都是非常重要的。如果不能满足
这个条件,整个系统可能是有问题的。

有很多不同的方式来为每一个对象创建一个唯一的标识符:

可能由一个模型来自动产生ID,在软件中内部使用,不会让它对用户可见;它可能是数据库表的一个主键,会被
保 证在数据库中是唯一的。只要对象从数据库中被检索,它的ID 就会被检索出并在内存中被重建;ID 也可能由用户 创建。

另一种解决方案是使用对象的属性来创建标识符,当这个属性不足以代表标识符时,另一个属性就会被加入以帮
助确定每一个对象。

当一个对象可以用其标识符而不是它的属性来区分时,可以将它作为模型中的主要定义。保证类定义简洁并关注
生命周期的延续性和可标识性。对每个对象定义一个有意义的区分,而不管它的形式或者历史。警惕要求使用属性匹配
对象的需求。定义一个可以保证对每一个对象产生一个唯一的结果的操作,这个过程可能需要某个符号以保证唯一性。
这意味着标识可以来自外部,或者它可以是由系统产生、使用任意的标识符,但它必须符合模型中的身份差别。模型必须
定义哪些被看作同一事物。


实体是领域模型中非常重要的对象,并且它们应该在建模过程开始时就被考虑。决定一个对象是否需要成为一个实
体也很重要。