原创 | 使用 JPA 实现 DDD 持久化 - O: 对象的世界 (2/3)
对象是程序的基本构件块,但多数时候,要完成一项功能,单个对象往往力不从心,而需要多个对象之间的协作。对象和对象之间要结合在一起,形成更高层次的结构体,以实现比单个对象的单个方法更高粒度的功能。因此,相互协作的对象之间存在着各种各样的关系。
思考一下下面的问题:
花和花瓣是什么关系?
党和党员是什么关系?
鸟类和动物是什么关系?
蜜蜂和花是什么关系?
总的来说,类与类之间存在三种类型的基本关系。
第一种类型是一般-特殊关系,表示“是一种(is a
)”关系。例如,鸟类是一种动物。而动物是一种生物。就鸟类与动物的关系而言,动物是一般类型,鸟类是特殊类型;动物是鸟类的泛化(Generalization
),鸟类是动物的特化(Specialization
)。就动物和生物的关系而言,生物是一般类型,动物是特殊类型;生物是动物的泛化,动物是生物的泛化。
第二种关系类型是整体-部分关系,表示“组成(part of
)”关系。例如花瓣是花的组成部分,发动机是飞机的组成部分,家庭成员是家庭的组成部分,党员是党的组成部分。依据关系的强弱,整体-部分关系可划分为两种子类型:一种是聚合(Aggregation)关系,另一种是组合(Composition)关系。聚合关系比较弱,分别代表整体和部分的两种对象都有各自独立的生命周期。例如党和党员的关系就是一种聚合关系,党和党员各自有独立的生命周期:有的党员死亡、离开或加入了别的党了,党还在;党解散了,党员个人还在。党员可以随时加入或离开党,也可以加入别的党,党员对党来说具有一定的独立性。而花和花瓣的关系是一种组合关系。花瓣是花的组成部分,缺少了花瓣,花就是不完整的;没有了花,就没有花瓣存在。花瓣的生命周期从属于花,没有任何独立性。
第三种关系是关联,代表两个类之间存在一种语义上的依赖关系。例如蜜蜂和花的关系。花由蜜蜂为其授粉,而蜜蜂以花蜜为食。关联关系在语义上是最弱的。确定类之间的关联关系通常是在分析和早期设计的活动。随着分析和设计的深入,通常会将关联关系明晰化为更加具体的关系,如继承、聚合和组合等。
还有第四种关系:依赖关系。依赖关系表明,一个类以某种方式依赖于另一个类。如果类A依赖于类B,当B在设计上发生了改变时,可能会影响到类A。
类间关系有方向性、多重性等性质。
方向性:类与类之间的关联可以是单向(unidirectional)的,也可以是双向(bidirectional)的。对于类A和B,如果类A有一个类型为B的单值或多值属性,但是类B没有相应的类型为A的单值或多值属性,就说类A有一个到类B的单向关联。如果类B同时有一个类型为A的单值或多值属性,那么就说类A和类B之间存在双向关联。
多重性:类与类之间的关联可以是单值(single-valued)的,也可以是多值(multivalued)的。如果类A有一个类型为类B的属性,那么,类A到类B的关联就是单值关联。如果类A有一个容器类型(集合、列表或数组等)的属性,且容器的元素类型为类B的话,那么,类A到类B的关联就是多值关联。
详细内容请戳这里↓↓↓
原创 | 使用JPA实现DDD持久化- O:对象的世界(2/3)
这一节就讲到这里,下一节我们继续讲"O:对象的世界的第3部分"。
如果觉得有收获,右下角点个【在看】鼓励一下呗!
版权声明: 本文为 InfoQ 作者【编程道与术】的原创文章。
原文链接:【http://xie.infoq.cn/article/2b041a0695bcf32fcb77c0492】。文章转载请联系作者。
评论