I know what I know,I'll sing what I said,We come and we go ...
--I Know What I Know,paul simon
相对于分歧较少的静态DomainModel结构,DomainModel的动态特征一直是扑朔迷离,让人捉摸不定。以至于出现了很多争论,分歧在哪里呢?如果我们把DomainModel整个动态特征看作一个集合,那么,各种争论的分歧就在于“该集合该如何分配到对象上?”。
在Rebecca Wirfs-Brock的《对象设计》中,提出了OO三种可选的控制风格:集中式、分散式和委托式。
集中式:这是过程式程序遗传的产物。系统中存在两类分工明确的对象,分别模拟结构化编程风格的“算法”和“数据”。在算法对象周围是一群仅仅持有信息的数据对象。聪明的算法对象根据需要向数据对象请求数据,处理得到的数据,向数据对象写入处理结果。应用逻辑的控制权完全由算法对象掌握,算法对象实质上是事必躬亲的控制对象。集中式的一个变种,是多个控制对象共同承担应用逻辑,这等价于功能分解。这种模式的优点在于,通过考察少数聪明的控制对象就可以弄清楚应用逻辑。然而,把动态特征集合,放入少量控制对象,要比放入较多智能对象复杂。另外,结构化编程风格面临的问题依然存在,由于数据对象被多个控制对象使用,处理该数据对象的方法,被分散到很多类中,不同数据对象间持有信息的一致性,通过控制对象间接维护,要做到“单点维护”并不容易。 如果想在数据对象间移动持有信息,将变得困难,因为需要同时维护很多关联的控制对象。
分散式:这是相对集中式的另外一个极端。动态特征集合被均匀的分散到了每一个对象。没有哪个对象比其他的更聪明。应用逻辑严格按照对象间的关联来驱动完成,各对象仅仅同它关联的对象打交道。好比一块由大量齿轮组成的机械表。集中式的优点正是分散式的缺点,要弄清楚应用逻辑,需要跟踪大量对象间的请求/响应。
委托式:介于上述两者之间,动态特征集合被层次化的分配到各对象中。控制者的职责被弱化为协调者,协调者比控制者需要知道的要少。数据对象由于承担了部分动态特征,也“聪明”起来,数据对象也充当起协调自身内部关系的角色。协调者只需要协调其他协调者和聪明起来的数据对象。除了层次上的区别外,他们都可以看作协调者。层次的出现,意味着可以在不同的层次理解应用逻辑,给任务划分提供了合适的界限。对子层次细节的忽略,保证了在系统变化时不会涉及过多对象。当然同集中式相比,需要考察更多不同层次的对象,单个应用逻辑不是非常直观。
我认为DomainModel的控制风格,应采用“委托式”。Model的各部分如同人体的细胞和组织,都略带智能,有明显的分工,协作完成任务。 当然,这里面还有很多问题需要仔细考虑。
--I Know What I Know,paul simon
相对于分歧较少的静态DomainModel结构,DomainModel的动态特征一直是扑朔迷离,让人捉摸不定。以至于出现了很多争论,分歧在哪里呢?如果我们把DomainModel整个动态特征看作一个集合,那么,各种争论的分歧就在于“该集合该如何分配到对象上?”。
在Rebecca Wirfs-Brock的《对象设计》中,提出了OO三种可选的控制风格:集中式、分散式和委托式。
集中式:这是过程式程序遗传的产物。系统中存在两类分工明确的对象,分别模拟结构化编程风格的“算法”和“数据”。在算法对象周围是一群仅仅持有信息的数据对象。聪明的算法对象根据需要向数据对象请求数据,处理得到的数据,向数据对象写入处理结果。应用逻辑的控制权完全由算法对象掌握,算法对象实质上是事必躬亲的控制对象。集中式的一个变种,是多个控制对象共同承担应用逻辑,这等价于功能分解。这种模式的优点在于,通过考察少数聪明的控制对象就可以弄清楚应用逻辑。然而,把动态特征集合,放入少量控制对象,要比放入较多智能对象复杂。另外,结构化编程风格面临的问题依然存在,由于数据对象被多个控制对象使用,处理该数据对象的方法,被分散到很多类中,不同数据对象间持有信息的一致性,通过控制对象间接维护,要做到“单点维护”并不容易。 如果想在数据对象间移动持有信息,将变得困难,因为需要同时维护很多关联的控制对象。
分散式:这是相对集中式的另外一个极端。动态特征集合被均匀的分散到了每一个对象。没有哪个对象比其他的更聪明。应用逻辑严格按照对象间的关联来驱动完成,各对象仅仅同它关联的对象打交道。好比一块由大量齿轮组成的机械表。集中式的优点正是分散式的缺点,要弄清楚应用逻辑,需要跟踪大量对象间的请求/响应。
委托式:介于上述两者之间,动态特征集合被层次化的分配到各对象中。控制者的职责被弱化为协调者,协调者比控制者需要知道的要少。数据对象由于承担了部分动态特征,也“聪明”起来,数据对象也充当起协调自身内部关系的角色。协调者只需要协调其他协调者和聪明起来的数据对象。除了层次上的区别外,他们都可以看作协调者。层次的出现,意味着可以在不同的层次理解应用逻辑,给任务划分提供了合适的界限。对子层次细节的忽略,保证了在系统变化时不会涉及过多对象。当然同集中式相比,需要考察更多不同层次的对象,单个应用逻辑不是非常直观。
我认为DomainModel的控制风格,应采用“委托式”。Model的各部分如同人体的细胞和组织,都略带智能,有明显的分工,协作完成任务。 当然,这里面还有很多问题需要仔细考虑。
安徽新华电脑学校专业职业规划师为你提供更多帮助【在线咨询】