?
?
?
在网上看到这样一段关于对象设计的说法:
充血模型其实很简单,就是面向对象设计的本质:“一个对象是拥有状态和行为的”,比如说一个人,他眼睛
什么样鼻子什么样这就是状态,人可以去打游戏或是写程序,这就是行为。为什么要有一个“人Manager”这样的东西存在去帮人“打游戏”呢?
举个简单的
J2EE的
例子,设计一个与用户(User)相关的功能,传统的设计一般是:
类:User+UserManager
保存用户调用:userManager.save(User user);
充血的设计则可能会是:
类:User
保存用户调用:user.save();
——User有一个行为是:保存它自己
?
?
User保存它自己,这是什么逻辑呢?我觉得非常奇怪。
?
用户用户可以保存自己,那么用户也可以删除自己了,这个和面向对象的最初思路就不一致了,因为在“用例”阶段,就没有用户“删除自己”的用例。
?
所以我的意见,就是一个“行为”到底放在哪里,肯定是要由用例决定的。
?
“人Manager”是一个不伦不类的概念,人自己“删除自己”更是荒谬。
?
我的
理解:
?
“保存”和“删除”本身是系统提供的一个功能,它的宾语,或者说“作用对象”是User,而主语不是,面向对象的概念,封装、多态是手段,本质和神髓是用真实世界考虑问题的方法来分析来设计,那么,分清主语和宾语就是必须的。
?
所以,所谓的“充血模型”、“贫血模型”只是设计领域里的概念,而且是纯粹设计和实现层面的概念,实际上
意义和价值都很低的。
?
我是一个比较质朴的
程序员和设计师,有些偏执和执拗,但是我一般不会屈从于任何权威和流行的东西,我有
我自己的方法论和价值取舍。我一向喜欢从事务的最最本质来分析问题,评判优劣取舍。所以,我的观点,可能很多人看了觉得怪怪的。其实我也是一家之言,一孔之见,写出来,希望能够整理自己设计方面的思路和心得、希望能给别人一些不同的观点和思路吧。