• 对象-关系Metadata映射模式


    • MetaData Mapping元数据映射
        • 在MetaData中保存object-relation映射的详细信息.
        • 以表格形式定义映射,并可由通用代码来处理映射.
      • 运行机制
        • MetaData中的信息如何以运行时Code的形式表现.
          • Code Generation
            • 程序:输入是MetaData,输出是映射实现类的SourceCode.
            • 在编译前在构建流程中自动生成.
            • 应保证将它完全合并到构建流程中,且不应该手动编辑它.
          • Reflective Program
            • 把方法/域视为数据.从MetaData文件中读入域和方法的名称,并用它们实现映射.
            • 性能慢,且会产生难以调试的代码.
          • 代码生成缺乏动态性,改变映射需要重新编译和部署.
          • 而对应反射方法,只需改变映射数据文件,就可以使用新的元数据.
          • 而映射的变化通常意味着需要改变数据库或者Code,所以变化较少.
        • 一般,使用单独的文件格式保存元数据.
          • XMl.提供了层次化结构.且自带语法分析器.
        • 可以在数据库本身中保存映射信息.
          • 把映射信息和数据保存在一起.
        • 对于一些特殊情况.处理方法是用手工编写的子类来覆盖通用代码.
      • 使用时机
        • MetaData映射能减少处理DB映射所需的工作量.但是准备元数据映射框架需要准备工作.
          • 应权衡使用手工代码增加新映射和使用元数据映射的优劣.
          • 通过创建一个处理所有公共行为的层超类型,可以减少代码量.
          • MetaData映射会影响到软件重构.
          • 但是,MetaData会使得重构Db更容易.
            • MetaData描述了DB方案的接口声明.
            • 对DB的修改可以被对元数据映射中的修改所包含.
    • Query Object查询对象
      • 描述一次DB查询的对象
        • 解释器.
        • 多对象结构,可以将自身转换为SQL查询.
        • 通过指定类和域,而非DB中的表和列来创建查询.
        • 构建查询独立于DB方案.同时将数据库的变化封装在局部.
      • 运行机制
        • 查询对象
          • 在SQL查询上应用解释器模式.
          • 作用是让用户使用对象来构建各种查询,并将这些对象转换为SQL字串.
        • 当对象和DB异构时.
          • 查询对象需要指定DB如何映射到对象结构.需要用到MetaData映射.
        • 多个数据库.
          • 可以设计查询对象,来根据运行的DB来产生不同的SQL.
        • 消除DB的冗余查询.
          • 当查询之前已经执行过的查询时,查询对象可以从标识映射中选择已经加载过的对象.来避免一次DB访问.
      • 使用时机
        • 项目有一个手工建立的DB源层时,不使用.
        • 只有当使用领域模型和数据映射器时,才会使用.同时配合MetaData映射.
        • 也可以直接在查找器中直接使用SQL.也是一样的效果.
        • 优点:封装了DB方案,支持多数据库,可以优化多次查询.
        • 应只构建仅满足当前需求的查询对象.不应试图去构建全功能的查询对象.
    • Repository资源库
      • 协调领域和数据映射层,使用类似于集合的接口来访问领域对象.
        • 当存在大量的领域类或者繁重的查询时,有必要在集中了查询构造代码的映射层之上建立一个抽象层.
        • 该层可以使重复的查找逻辑最小化.
        • 资源库起到了类似内存中领域对象集合的作用.
      • 运行机制
        • 类似于查询对象.表现为简单的接口.
        • 资源库把元数据映射和查询对象结合起来,自动由条件生成SQL代码.
      • 使用时机
        • 多数据源时.
        • 当把数据输入当做领域对象使用时.
  • 相关阅读:
    CF1042E Vasya and Magic Matrix
    Luogu 4868 Preprefix sum
    CF1042F Leaf Sets
    CF1041F Ray in the tube
    【Luogu】P1410子序列(DP)
    【Luogu】P1383高级打字机
    【Luogu】P1681最大正方形2(异或运算,DP)
    【Luogu】P1122最大子树和(DFS,树上DP)
    【Luogu】P2258子矩阵(状态压缩,DP)
    【Luogu】P2158仪仗队(欧拉函数)
  • 原文地址:https://www.cnblogs.com/robyn/p/3526859.html
Copyright © 2020-2023  润新知