• 企业架构模式读后感企业架构模式之O/R映射


    一、 数据源模式

    1. Table Data Gateway

    根据表为单位来对数据源进行封装,一个实例处理这个表中所有的行的操作。

    查询操作的对象都为RecordSet.主要用处就是隔离sql操作和面向对象操作。

    2. Row Data Gateway

    根据记录为单位来对数据源进行封装。

    3. Active Record

    将数据库的一行包装起来,封装数据库访问,并在其中实现领域逻辑。(充血式对象)

    4. DataMapper(JAVA中目前使用最多的一种方式)

    隔离O/R映射,在其中完成对象à关系和关系à对象转换,并保持对象和关系的独立性。耳熟能详的DAO方式应该就是此方案的实现。

    二、 对象-关系结构模式

    • 唯一性:

           关系型数据中记录是以主键唯一标识一条记录,对象是以内存的地址来唯一标识对象的,那么在这两者关系交界时,需要一种机制来解决这个问题。

    1. Identity field

           将数据库标识ID保存在对象中以在内存对象和数据库记录之间维护唯一性。

    • 生成机制:

          在新对象产生后,究竟是在插入数据库之前就有了标识,还是插入数据库之后才产生标识。

    • 解决方法:

           数据库内产生,由数据库保证其序列唯一性。

           自增长列,每次新记录插入数据库后自动生成标识(应该是事物),并在插完之后更新标识,并把标识返回给对象层。

           计数器,如oracle的sequence.

         对象层产生:

         对象层产生主要面对问题是保证序列唯一。

         产生机制上保证:uuid,产生必然唯一。

         数据访问上保证:数据库中内置count,每次访问时加锁,用完之后+1,并解锁。

    • 结构:
    • 关系结构-->面向对象
    • 一对一,一对多

      2. foreign key mapping

            主要在于面向对象增加一个对象时,如何处理其关联的对象(一个或多个)

             行为层次:

    • 增加:可以插入一个主对象,然后插入引用主对象的多个对象。

    比如订单和订单条目的关系,先插入订单,产生订单ID;然后设置创建订单条目所需要的订单Id,然后batch 插入订单条目。

    • 修改:要分析修改的是实体域,还是关系域。

    实体域即直接根据其标识修改即可

    关系域修改就比较麻烦,必须比较这个关联ID集合,看其是否有变化,或者全部删除,重新插入。

    • 删除:根据需求的不同需要有级联或不能删除。
    • 查询:采用两次查询,先查主对象,再查引用它的对象。
    • 多对多:

         3. association Table Mapping

           针对多对多情况,一般数据库中会有一个关联表,放两者之间的映射关系。

       对象层的结构会是一个对象有一个列表引用到对象集合,反之依然。

       行为层次

    • 增加: 需要先插入一个主对象,再插入一批引用主对象的对象集合,最后将两者关系插入关联表。
    • 修改:分析要修改的是实体域,还是关系域。

      实体域即直接根据其标识修改即可。

      关系域要在关联表中先将所有之前关联删除,再插入新的关联集合。

    • 删除:根据需求的不同需要有级联或不能删除。
    • 查询:采用两次查询,先查主对象,再将关联表和引用主记录表做连接查出引用主对象的对象集合。
    • 面向对象特性-->面向关系
    • 树形结构(类目树)

       4. serialized LOB

        将对象图式关系串行化成一个流,存入到数据库一个字段里。

    • 弱对象:

      5. Dependent Mapping:

      必须依赖其他对象存在的对象。

      可以将数据源访问代码合并于主对象。

    • 继承:

    6. Single Table Inheritance

    用一张表中的所有列将继承体系中对象的所有属性都保存起来。

    Pros:

    只有一张表,不需要连接

    当继承关系改变时不需要对关系表作改变。

    Cons:

    空间冗余,结构体系相差越大,冗余空间越大。

    7. Class Table Inheritance

    一张表对应继承体系中的一个类。

    Pros:

    不会浪费空间。

    通过表的关系可以清晰地看到继承体系。

    Cons:

    由于继承体系中的一个子对象对应的属性散布在多个表中,因此需要连接或多次查询。

    所有继承体系中的属性上提或下置,都必须改动表结构。

    父表可能存在瓶颈,因为所有继承体系中对象的数据库操作都需访问父表。

    8. Concrete Table Inheritance

    继承体系中非抽象类都有一个表对应。

    Pros:

    每个表自包含,没有相关联的字段。

    找具体的子类时不需要连接。

    找一个具体的子类时负载只会在子表上。

    Cons:

    主键跨多个表,较难维持唯一。

    父类查找需要跨多个子表进行多次查找。

    继承体系中的属性上提或下置的代价在Single Table Inheritance和Class Table Inheritance 之间

  • 相关阅读:
    团队冲刺4
    团队冲刺3
    团队冲刺2
    团队冲刺1
    01大道至简阅读笔记
    03 梦断代码阅读笔记
    TOMCAT------>web资源访问
    Tomcat----->tomcat配置虚拟主机(搭建网站)mac
    Linux中常用操作命令
    tomcat------->简单配置
  • 原文地址:https://www.cnblogs.com/jinspire/p/2747412.html
Copyright © 2020-2023  润新知