WEB开发网
开发学院软件开发C语言 实体框架之领域驱动实践(五):聚合 阅读

实体框架之领域驱动实践(五):聚合

 2010-09-30 22:37:35 来源:WEB开发网   
核心提示: 为了实现聚合的概念,我们又一次地需要用到“部分类(partial class)”的功能.我们首先定义一个IAggregateRoot的接口,修改每个聚合根的实体类,使其实现IAggregateRoot接口,如下:到这里又有问题了,接口IAggregateRoot中什么都没

为了实现聚合的概念,我们又一次地需要用到“部分类(partial class)”的功能.我们首先定义一个IAggregateRoot的接口,修改每个聚合根的实体类,使其实现IAggregateRoot接口,如下:

实体框架之领域驱动实践(五):聚合

实体框架之领域驱动实践(五):聚合

到这里又有问题了,接口IAggregateRoot中什么都没有定义?!我在我的技术博客中,特别解释了C#中接口的三种用途,请参考这篇文章:《C#基础:多功能的接口》.在这里,我们将IAggregateRoot接口用作泛型约束.在看完后续的两篇介绍领域对象生命周期的文章后,你就能够更好地理解这个问题了.事实上,在领域驱动设计的社区中,不少人都是这样用的.

最后说明一下,由于实体框架使所有的实体类继承于EntityObject类,而从面向对象的角度,接口是没办法去继承于类的,因此,在这里我们的IAggregateRoot接口好像跟实体没什么太大的关系,而事实上聚合根应该是一种实体.在很多领域驱动的项目中,设计人员专门设计了 IEntity接口,所有实现了该接口的类都被认定为实体类,于是,IAggregateRoot接口也就很自然地继承IEntity接口,以表示“聚合根是一种实体”的概念,代码大致如下:

实体框架之领域驱动实践(五):聚合

实体框架之领域驱动实践(五):聚合

总的来说,领域模型需要根据领域概念分成多个聚合,每个聚合都有一个实体作为“聚合根”,通俗地说,领域对象从无到有的创建,以及CRUD操作都应该作用在聚合根上,而不是单独的某个实体.当你的代码需要直接对聚合内部的实体进行CRUD操作时,就说明你的模型设计已经存在问题了.

上一页  1 2 3 

Tags:实体 框架 领域

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接