论坛首页 入门技术论坛

如何处理Value Object的继承关系

浏览 2016 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-10-24  
我有一个这样的问题:
类A是一个容器对象,包含了一个B对象的List. A和B都是VO对象,它们一起成为一个包含一些业务数据的数据结构。A返回给类C,类C是一个业务逻辑对象。它处理并显示A的内容,当然也要取出A里面的B做相应的处理。
问题是,现在我们有一个类似的业务,数据和原有的数据几乎相同,只是B里面多了一些东西。这时候,可以有下面三个选择:
1.修改B,加上新的内容。这样A包含B的数据结构也可以给新业务用。
2.创建新的类A2和B2,让他们完全是新的东西。但是这个问题是出现了重复的代码。唯一不同的是B2里面多了一些东西。
3.我感觉最理想的是B2继承B,添加新的东西。但这个问题是,新业务里面仍然使用A,只不过A里面包含的B2了。可是对于外部的业务处理类,比如C2,它怎么知道是B2而不是B呢?可以用强制类型转换,但这不是好的办法。
希望大家指点一下。

这基本上是一个VO对象的继承关系的处理问题。我翻了23各设计模式,没有看到适合的。
谢谢!
   发表时间:2007-10-30  
记得《敏捷开发》里有一个“依赖倒置原则”,说:不要依赖于具体的实现,而要依赖于接口。说的正好是这个场景。
从B和B2中抽象出接口IB,而A和C只使用IB。

zjueman 写道
但这个问题是,新业务里面仍然使用A,只不过A里面包含的B2了。可是对于外部的业务处理类,比如C2,它怎么知道是B2而不是B呢?可以用强制类型转换,但这不是好的办法。

这说明了你在C的实现中,有逻辑耦合的情况出现,即依赖于具体类的实现。如果能够做到解耦合,实现上面的方法就不难了。
0 请登录后投票
   发表时间:2007-11-08  
但value object如何抽象接口?接口一般好像都是用在业务对象上吧,不是很懂。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics