请问这种情况应该用什么模式?

03-05-13 rumenzhe
我有一个表,有几个维护这个表的程序,这些程序的作用有的在系统初始化时将此表中的数据先放进内存,以加快速度,有的构造与此表字段映射的对象,作为一个value object,等等。现在由于业务逻辑变化,需要在这个表中加一个字段,于是维护这个表的几个程序都得改动,请问大侠们有什么模式能解决这个问题,使得改动能集中在一个地方??

谢谢!!!

              

blues
2003-05-13 21:16
>这些程序的作用有的在系统初始化时将此表中的数据先放进内存,以加快速度

我现在的做法是,根据表结构可以生成一个DAO和valueBean,当表结构变化时重新生成DAO和valueBean,其他部分不用改;

>有的构造与此表字段映射的对象,作为一个value object,

在某些情况下我的做法是create view,以映射原表的一些字段。这样原表的变化不会影响view的变化。

另外,我感觉表结构和entity虽然密切相关但不是一个概念的东西。for example,account表可能包含账户基本信息以及资金信息,但从entity概念上讲,account表包含了2个entity:账户实体和资金实体;另一方面,一个entity的数据可能分散在多个表中。例如"资金实体"的数据可能分存在account表的某些字段以及interest(利息)表中,account表和interest表通过foreign key关联。

如你所说增加一个字段的情况,我认为总能把这个字段归结为是哪个实体的属性,从而修改的是这个entity的相关实现,其他entity不用修改。

这不是使用什么design pattern的问题。在design pattern之前还有软件结构的更基本的原则。不管用不用design patten,基本原则都需遵循。

--欢迎参与讨论

banq
2003-05-14 11:11
你这个问题正是目前热门技术JDO试图解决的问题,因为我们程序语言实现了对象化,但是数据库还是关系型的,所以在对象和关系直接存在一个映射:O/R Map,如果我们使用JDO技术,就可以完全用对象组织了。

在没有JDO支持下,你可能手工自己来处理了,尽量设计数据库时遵循粒度细化的原则,这样,修改起来牵动就小了。

wys1978
2003-05-14 12:17
可以使用dynamic value object, 写VO的定义文件, 通过统一的delegator调用, 这样如果增加, 修改字段就可以只用修改定义文件, 而不用修改代码.

to blues,

你可以参考一下ofbiz的view-entity的做法, 如果是分散在多个entity里面的数据, 可以用一个虚拟的view-entity来实现.

xxgw
2003-05-14 13:15
我不只你问的可是这个意思:

1、你用了o/r mapping

2、你的表结构添加了字段,那么对应的mapping java文件就需要重新修

改(虽然可以生成)。

3、无论mapping文件是否一定需要重新生成,但是对应client程序肯定需要修改,有没有什么办法修改的少点。

请问,你是这个意思吗?

猜你喜欢
2Go 1 2 下一页