元组表模式(J2EE design pattern摘记及感想7)

探讨序列化实体模式的局限性及元组表模式的优势。通过拆分数据对象为多个表,便于灵活调整数据结构,即使在字段变动时也不影响整体架构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

元组表模式:

序列化实体模式的缺点是:二进制代码难以理解,当格式发生变化时很难该变。若就用一行元组来表示完整的数据(对象)(即普通的数据库表示方式),当我们对数据格式的要求有变化时,比如添加一个属性列,我们就不能用原来的表了,必须重建表。

元组表模式把一个数据对象拆分成多个表,每个表有key,fieldname,属性1的值,属性2的值。。。,一个表中,只有一个属性的值非NULL,其它都为NULL。通过具有相同key的表的组合,我们就能得到完整的数据了。

实现:MemberDTO,实现标准的get set方法,这些方法名隐含了属性的名称,这些信息在使用反射时用到。首先,saveMember(MemberDTO member),用反射机制,得到member所有的方法。现在我们要做的是,得到所有member的信息,并更新到数据库中(添加记录)。得到member信息当然是用member的get方法啦。所以我们遍历member中所有以get开头的方法,然后调用这个方法(反射机制,invoke)。得到了这个值,就要把它更新到数据库中,但之前我们必须知道这个值的类型,才能确定是调用setString还是setLong之类,这个类型由反射机制从get方法返回类型中得到。用这样一套复杂的反射机制的初衷,是使我们不能关注MemberDTO内部的具体实现,我们可以改变MemberDTO的实现,增加get set或减少,但我们不必改变saveMember 和findMember.

但这边作者写的代码却未能实现这一点,所以我以为他的这段代码是有问题的。试想一下,我们为DTO增加get set 方法,我们必然要对saveMember作大的改动。

最好的方法就是在fieldname和元组下标之间有个映射,而不管是否增删了字段(删除字段时,我们可仍然保留读字段的位置)

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值