设计模式-具体表继承(Concrete Table Inheritance)

用每个具体类对应一个表来表示类的继承层次

把内存中每一个对象映射为一个单独的数据库行就是具体表继承,对于继承层次中每一个具体类都有一个表与之对应。

运行机制

  • 对继承层次中的每一个具体类使用一个数据库表,每个表中的列都对应着具体类和这个具体类的所有祖先类.
  • 键,不仅在一个表中是唯一的,而且在继承层次里所有的表中都是唯一的.

使用时机

优点:

  • 每个表都是自包含的,没有不相关的域;
  • 从具体映射器读取数据的时候不需要连接操作;
  • 只有在类被访问的时候表才能被访问,这样可以分散访问负载

缺点:

  • 不能把数据库关系加到抽象类中;
  • 如果领域类中的某个域被提升,同样需要修改表结构;
  • 如果一个超类的域改变了,需要修改拥有这个越的所有表;
  • 超类上的一次查询需要检查所有表,导致多次访问或连接操作.

示例-运动员和他们的家属(C#)

Step1 :每个映射器各自定义表名

Step2 :每个映射器类和它的所有超类都对应一个加载方法

Step3 :最后采用运动员映射器处理

与以往例子不同,此处需要读取三次数据库,因此在内存中进行处理,这段代码比较有效。

更新、插入、删除操作的方法实现,从结构上和查找类似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值