DCI的核心思想:
- 对象扮演某个角色进入场景,然后在场景中进行交互,场景的参与者就是对象所扮演的角色;
- 一个对象可以扮演多个角色,一个角色也可以被多个对象扮演;
- 对象的属性和行为分为:A:核心属性和行为,这些属性或行为是不依赖于任何场景的;——这部分相当于是基础,固定不变,与变化隔离。B: 场景属性和行为,对象通过扮演某个角色进入某个特定场景时拥有的属性或行为,一旦对象离开了这个场景,不再扮演了这个角色后,这些场景属性或行为也就不再属于该对象了;比如人有核心的属性和行为:身高、体重、吃饭、睡觉,然后当人扮演教师的角色在教室里上课时,他则具有上课的行为,一旦回到家里,就又变成了一个普通的人;比如一个物品,在生产时叫产品,在销售时叫商品,坏了的时候叫废品,它在不同阶段扮演不同的角色所具有的属性是不一样的;——这部分相当于是基础的扩展,是场景特有的。
- 场景的生命周期,场景是一个时间与空间的结合,可以理解为某个活动;一旦活动结束,则场景也就消失;
- DCI中的D可以理解为DDD中的领域模型;场景中交互的是角色,而不是领域实体。场景属于DSL的思考层面,更接近于需求和用例。而领域也是伟大的出现,但是不能为了领域而领域,为什么呢?因为场景是大哥用例是大哥。领域的存在是为了控制固定概念的部分,这样在某种成度上控制了一定的复杂性和提高了可控性,而DCI则解决了可变性和需求的问题。从某种意义上来说,“领域层(在DCI中可能不会太凸显领域层,不如OLD DDD那么凸显)” 是为了DCI架构服务的。
- 角色是人类的主观意识,用于对象分析和设计阶段,但是在运行阶段,角色和对象实体是一体的,软件运行过程中只有对象,只是这些对象在参与某个活动时扮演了某个角色而已;
领域驱动设计中的对象设计部分的一些要点:
DDD能够指导我们建立一个静态的领域模型,该领域模型能够清楚的告诉我们建立出来的对象“是什么”,但是DDD却不能很自然的解决“做什么”的问题。大家都知道DDD在对象设计的部分实际上是一种充血模型的方式,它强调对象不仅有属性还会有行为,如果行为是跨多个领域对象的,则在DDD中用领域服务解决。但是DDD却没有完整的考虑对象与对象之间的交互如何完成,虽然它通过领域服务的方式协调多个对象之间进行交互或者在应用层协调多个对象进行交互。但是在DDD中,对象往往会拥有很多不该拥有的属性或行为。
补充说明:
1.编码设计要抽离出那些固定不变的部分,让可变的部分成为其扩展——这样就能提高代码的重用和灵活性,降低需求的变化对代码的影响(改动)。
2.场景决定了(对象的)角色,领域依托于场景。脱离的角色,谈角色就没有任何意义!
以上是最近学习的简单整理,文中的主要内容转载于http://www.cnblogs.com/netfocus/archive/2011/07/10/2102099.html,仅在文中做了了自己的理解,希望此文能对你有所启发! (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|