对象-关系Metadata映射模式
- MetaData Mapping元数据映射
- 在MetaData中保存object-relation映射的详细信息.
- 以表格形式定义映射,并可由通用代码来处理映射.
- 运行机制
- MetaData中的信息如何以运行时Code的形式表现.
- Code Generation
- 程序:输入是MetaData,输出是映射实现类的SourceCode.
- 在编译前在构建流程中自动生成.
- 应保证将它完全合并到构建流程中,且不应该手动编辑它.
- Reflective Program
- 把方法/域视为数据.从MetaData文件中读入域和方法的名称,并用它们实现映射.
- 性能慢,且会产生难以调试的代码.
- 代码生成缺乏动态性,改变映射需要重新编译和部署.
- 而对应反射方法,只需改变映射数据文件,就可以使用新的元数据.
- 而映射的变化通常意味着需要改变数据库或者Code,所以变化较少.
- Code Generation
- 一般,使用单独的文件格式保存元数据.
- XMl.提供了层次化结构.且自带语法分析器.
- 可以在数据库本身中保存映射信息.
- 把映射信息和数据保存在一起.
- 对于一些特殊情况.处理方法是用手工编写的子类来覆盖通用代码.
- MetaData中的信息如何以运行时Code的形式表现.
- 使用时机
- 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代码.
- 使用时机
- 多数据源时.
- 当把数据输入当做领域对象使用时.
- 协调领域和数据映射层,使用类似于集合的接口来访问领域对象.
对象-关系Metadata映射模式的更多相关文章
- python下申明式的对象关系DB映射器--Pony
之前看到了Sails.js的waterline提供了声明式的关系型对象与DB的映射器,惊为天人,可以说是极大地提升了效率. 利用waterline的对象关系模型,用户可以直接使用javascript语 ...
- Hibernate单向多对一对象关系模型映射
单向的many-to-one 案例: 班级和学生 父亲和子女 单向:只能由其中一方维护关系 Many-to-one中有many的一方法维护或者体现两者之间的关系. 单向的many-to-one描述学生 ...
- Hibernate双向一对一对象关系模型映射
一个员工一辆车:one-to-one 实现一:让汽车表中的外键唯一 create table emp ( eid int primary key auto_increment, ename varch ...
- LLBL Gen Pro 4.2 Lite 免费的对象关系映射开发框架与工具
LLBL Gen Pro是一款优秀的对象关系映射开发框架,自2003年发布以来,一直有广泛的客户群.LLBL Gen Pro有几个标志性的版本,2.5/2.6是一个很稳定的版本,公司的一些旧的项目仍然 ...
- 对象关系映射ORM
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效 ...
- 对象关系映射(ORM)
1.什么是 对象-关系映射 对象-关系映射(Object Relational Mapping,简称ORM,对象关系映射)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,OR ...
- 死去活来,而不变质:Domain Model(领域模型) 和 EntityFramework 如何正确进行对象关系映射?
写在前面 阅读目录: 设计误区 数据库已死 枚举映射 关联映射 后记 在上一篇<一缕阳光:DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)?>博文中, ...
- 解析大型.NET ERP系统数据访问 对象关系映射框架LLBL Gen Pro
LLBL Gen Pro是一个为.NET开发人员设计的的对象关系映射(ORM)框架,与NHibernate,Entity Framework等框架一样,通过实体与数据表的映射,实现关系数据库持久化. ...
- Hibernate(开放源代码的对象关系映射框架)
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自 ...
随机推荐
- 使用AmplifyJS和JQuery编写更好更优雅的javascript事件处理代码
事件(或消息)是一种经常使用的软件设计模式.可以减少消息处理者和消息公布者的之间的耦合,比方J2EE里面的JMS规范.设计模式中的观察者模式(也叫公布/订阅模式).这对于javascript代码相同适 ...
- jQuery 效果 - animate() 方法
http://www.w3school.com.cn/jquery/effect_animate.asp 实例 改变 "div" 元素的高度: $(".btn1" ...
- WCF入门教程(二)从零做起
通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) 定义了协议,具体什么操作,操作的参数和返回值 ...
- iOS xcode8提交 iOS10 “此构建版本无效” (已解决)
近期上传应用,遇到了"此构建版本无效"的问题,如图 网查了一下,解决了这个问题:(注意:先不要急着怀疑是网络问题,重新提交,先检查问题,别问我怎么知道的...) 1:iOS10 之 ...
- java实现迷宫算法--转
沿着所有方向进行探测,有路径则走,没有路径则从栈中回退. 回溯法是一种不断试探且及时纠正错误的搜索方法,下面的求解过程采用回溯法.从入口出发,按某一方向向前探索,若能走通(未走过的),即某处可以到达, ...
- 基于html5实现的愤怒的小鸟网页游戏
之前给大家分享一款基于html5 canvas和js实现的水果忍者网页版,今天给大家分享一款基于html5实现的愤怒的小鸟网页游戏.这款游戏适用浏览器:360.FireFox.Chrome.Safar ...
- Golang学习 - strings 包
------------------------------------------------------------ strings 包与 bytes 包中的函数用法基本一样,不再赘述. 只对 R ...
- UIImage图片处理,旋转、截取、平铺、缩放等操作
来源:iOS_小松哥 链接:http://www.jianshu.com/p/9ab1205f5166 有时候我们需要处理图片,比如改变大小,旋转,截取等等,所以今天说一说图片处理相关的一些操作. 本 ...
- iOS (UIButton封装)仿糯米首页缩放“按钮”效果
前言 过年期间,少不了各种聚会,当下聚会大多数情况下自然是团购,然后就是用各种APP...使用度娘糯米时(不是广告,不是广告,不是广告!),偶然注意到了它的首页中一个有意思的效果,就是那些“按钮”点击 ...
- 关于linux系统安全配置脚本
本脚本是第二次更新,已经大量应用在某大型媒体网站体系中,加入了之前没有想到的一些安全设置.使用方法将其复制,保存为一个shell文件,比如security.sh.将其上传到Linux服务器上,执行sh ...