一篇文章只写一个小主题,这样才能让读者集中注意力。
不过此系列文章都是给自己看的,因为它们没什么新意,都是在别人牙慧的基础上总结出来的
===================================================================================
结论:
充血模型比贫血模型更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.
另外,由于职责的合理分配,使得这里实现了控制反转,从而使代码更优雅简洁。