面向对象,封装变化,可是对象本身就在变化该怎么办呢?

px96004 13-07-05
         

比如说 一个Person类

有地址 address属性
有电话 tel属性
有姓名 name属性

系统呢创建了一个 张三

Person zhangsan = new Person()
...
在系统里跑得挺好

面向对象,封装得都挺到位了。

突然有一天。

他有车了。(需求增加)

咋办呢?

Person类里面没有
car的属性啊

也没有drive的方法啊。

好吧。。。
那咱把这个功能加进去。
新增加了 Driver类继承Person或者Person类里面直接增加了car属性和drive方法....

但是...但是 00不应该封装变化么?如何封装未知的变化呢?或者说 对这种新增需求的变化,有没有比较好的方式呢?

给我感觉 好像这是一种悖论:既要面向对象,又要封装,这好像是永远无法完成的,因为真实世界中的对象总在变嘛。

         

3
aheadkeeper
2013-07-05 21:30

司机和普通人是有区别的

aheadkeeper
2013-07-05 21:33

车主是普通人的类的一个子类
person类不需要动,车主类 继承person即可

banq
2013-07-06 06:59

通过DCI(桥模式)或者事件实现。

你在家里是儿子,在单位是程序员,人在不同场景上下文扮演不同的角色,不必将所有角色的行为塞入一个人中。

DCI(桥模式)是从结构组合上进行动态变化,根据上下文将角色行为注入到模型中。


[该贴被banq于2013-07-06 07:16修改过]

flyzb
2013-07-06 21:25

从业务的角度分析,“人”属于人力资源子系统,“车”属于车辆管理子系统,“人和车”属于售后管理子系统。
从小系统开始设计时,对业务的认识往往是混沌的,设计出的代码自然是强耦合的,所以封装的变化首先不是一个技术问题,而是一个业务认识问题。

4Go 1 2 3 4 下一页