首页新闻找找看学习计划

求指导OO划分的最小原则

0
悬赏园豆:20 [已解决问题] 解决于 2013-11-18 10:03

面向对象中,对象倒底要小到什么样?比如订单,它有一个状态“作废”,作废也包含几个字段(谁在什么时间为什么作废),这种情况下,是做成一个订单对象里标识一个作废状态及作废所用的字段,还是做成两个对象,正常订单、作废订单,按感觉应该是做成第二种,这样做的理由是?

问题补充:

像Person类,是给一个字段Gender标识下男女,还是建立男人女人两个对象?

happydaily的主页 happydaily | 小虾三级 | 园豆:646
提问于:2013-11-11 09:06
< >
分享
最佳答案
0

Person 为抽象类,男人女人伪娘等派生即可。

订单中包含了状态,只有一种属性  是否作废或者可以理解为正常订单、作废订单。

而至于作废的原因,那个是一个依赖的关系,因为有了订单才有订单状态。

收获园豆:10
````` | 专家六级 |园豆:14268 | 2013-11-11 09:39

那是设计成一个对象?

happydaily | 园豆:646 (小虾三级) | 2013-11-11 11:08

@happydaily: 如果很固定 男或者女  不考虑其他的话 当然设计成属性比较好。看需求来设计。

````` | 园豆:14268 (专家六级) | 2013-11-11 11:10
其他回答(3)
1

额觉得:得看复杂度,比如男女,就不用单独再创建一个对象了,非男即女,不会有变化,弄个枚举就行了;反之,如果内容负载,属性众多,就搞成对象。另外,你说的那个订单对象里包含一个作废对象我觉得挺变扭的,不如把作废对象拆分成订单对象的几个属性:订单{订单名称:xxxx,状态:作废,作废人:xxx,作废时间:xxx}。我感觉不用做成两个对象分“正常”和“作废”,把正常和作废当做订单的一个属性:”状态“为好 -------------以上仅供参考

收获园豆:10
会长 | 园豆:6066 (大侠五级) | 2013-11-11 09:57

那样做会不会有冗余了?

支持(0) 反对(0) happydaily | 园豆:646 (小虾三级) | 2013-11-11 11:08

@happydaily: 是冗余了,不过适当地冗余带来开发的遍历还是值得的。分成两个表开发难度大了吧

支持(0) 反对(0) 会长 | 园豆:6066 (大侠五级) | 2013-11-11 11:29
0

状态性的和记录性的需要分开 

这是2个维度 

及当前状态 

以及历史的 状态修改明细

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2013-11-11 16:22
0

订单和作废状态合为一个对象保持冗余,还是拆分为两个对象,这要看你的需求。
如果系统要求保留操作痕迹,那么作废状态是要作为痕迹单独保存起来的。

当然,如果你的程序有完善的日志系统,推荐前者。

飞扬的尘埃 | 园豆:1318 (小虾三级) | 2013-11-11 16:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册