关于Domain Model的对谈录之一: 充血模型与OO

一篇文章只写一个小主题,这样才能让读者集中注意力。

不过此系列文章都是给自己看的,因为它们没什么新意,都是在别人牙慧的基础上总结出来的

===================================================================================

结论:

 
充血模型比贫血模型更OO

==========================================

A:
充血模型比贫血模型更OO.因为一个领域对象中既有数据又有行为,符合对象的定义

B: 这太牵强了!你还是说点有实际意义的吧。

A: 好吧。比如说,我们可以在充血模型中
通过多态消除IF/ELSE,这算是典型的OO吧。

B: 举个实际的例子吧。

A: 好。比如你还在上大学的时候,天天要去食堂。一般情况下,你还没开口,食堂师傅就给你打好了5毛钱的饭,为什么?

B: 因为我是男生。如果是女生,默认打3毛钱的饭。

A: 对。那请你用Transaction Script模式,也就是贫血模型,实现“默认打饭”逻辑。

B:

      void 打饭(student){
          if(student 是 “男生”){
               打五毛;
          }else{
               打三毛;
          }
      }
   

A: 好。看我这个

  

      void 打饭(student){
        打(student.默认饭量());
      }

      class MaleStudent extends Student(){
         int 默认饭量(){
             return “五毛”;
         }
      } 

      class FemaleStudent extends Student(){
         int 默认饭量(){
             return “三毛”;
         }
      } 
   

B:嗯,的确!由于Student变成了充血模型,

   1.
充血模型可以自己实现业务逻辑,业务逻辑在过程性的Transaction Script中无法多态,而在充分OO的领域对象就可以方便地实现。

   2.
另外,由于职责的合理分配,使得这里实现了控制反转,从而使代码更优雅简洁。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.