发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA
1 2 3 4 下一页 Go 4

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

         
2013-07-05 12:32
赞助商链接

比如说 一个Person类

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

系统呢创建了一个 张三

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

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

突然有一天。

他有车了。(需求增加)

咋办呢?

Person类里面没有
car的属性啊

也没有drive的方法啊。

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

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

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

3
2013-07-05 21:30

司机和普通人是有区别的

2013-07-05 21:33

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

2013-07-06 06:59

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

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

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


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

2013-07-06 21:25

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

4Go 1 2 3 4 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com