如何处理Value Object的继承关系

07-10-24 zjueman
我有一个这样的问题:

类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各设计模式,没有看到适合的。

谢谢!

         

banq
2007-10-24 15:58
>我感觉最理想的是B2继承B,添加新的东西。但这个问题是,新业务里面仍然使用A,>只不过A里面包含的B2了。

使用这个方案,模式已经告诉我们,一般不要轻易破坏封装,那么继承就成为常用选择,应该选择这个方向。

>可是对于外部的业务处理类,比如C2,它怎么知道是B2而>不是B呢?可以用强制类>型转换,但这不是好的办法。希望大家指点一下。

那你要做一个新的方法,相当于A的工厂方法。

另外, 如果不重新考虑业务,单纯就VO论VO,是找不出完美的设计方案的,这其实也就是业务建模重要的一个步骤。

zjueman
2007-10-24 23:03
谢谢banq的指点。

我现在差不多决定创建新的A2和B2了,让它们独立于现有A和B. 感觉这样简单些,可以确定不会破坏A和B以及原有的逻辑。很多同事都认为这样做好些。我也就认同了。

不过感觉还是不理想,但是还没有想到理想的方案。

使用B2继承B强制转换太麻烦了。但是如果使用工厂,感觉又需要比较大的动作。估计会被否决的。先使用这个简单的方案了。

猜你喜欢