依赖映射 Dependent Mapping
- 让一个类为其子类(泛意上的)执行DB映射
- 一些对象肯定会出现在另一对象的上下文中.
- 此时,使用另一对象的Mapper来执行第一个对象的映射,来简化映射过程.
- 运行机制
- 在DB持久化时,依赖者类依赖于所有者类.每个依赖者只能有一个所有者.
- 活动记录和行数据入口
- 依赖者类的映射代码都写在所有者中.
- 数据映射器
- 没有依赖者的映射器类,在所有者的映射器中完成依赖者的映射代码.
- 表数据入口
- 根本没有依赖者类.在所有者中完成对依赖者的处理.
- 通常,加载一个所有者时,会把相关的依赖者加载.当该相关加载耗费很大时,会使用延迟加载.
- 依赖者
- 没有标识域.也就不用存储到一个标识映射中.
- 不能通过ID由查找方法加载.从而没有依赖者的查找器,而仅存在所有者的查找器.
- 一个依赖者也可能是另一个依赖者的所有者.此时,由主所有者控制整个依赖者层次结构.
- 内存对象中,只有所有者和依赖者的依赖者才能够拥有指向依赖者的引用.
- Db中,除了所有者表,和拥有所有者的表之外,其它表不能拥有依赖者表的外键.
- UML中,使用组合来表示两者之间的关系.
- 更新
- 由所有者来完成对依赖者的写和保存.
- 对依赖者的更新可以通过删除和插入来完成.该过程不需要分析(直接先删除,后插入).
- 但是,对所有者是否变化的跟踪会变得复杂.
- 所有对依赖者的改变都要标记所有者.
- 方案:让依赖者恒定不变.
- 这样,对依赖者的改变,都是先移除,再插入一个新的依赖者的过程.
- 此方案简化了DB映射,但同时耦合了内存模型和数据库映射.
- 使用时机
- 当一个对象制备另一个对象引用时,一般是某个对象拥有一个对应的依赖者集合时,同时依赖者又没有后向指针时.
- 同时,如果对象本身不需要ID时,使用它简化了对象的保持管理.
- 需要满足的前置条件
- 每个依赖者仅有一个所有者
- 不能存在出所有者之外的对象拥有对依赖者的引用.
- 它是一种简化DB映射的技术,同时会使得无法从外部引用依赖者.导致根所有者的查找机制很复杂.
- 在使用工作单元时,不要使用它.
- 工作单元不能控制依赖者.结果会出现孤立的不被跟踪的依赖者.
依赖映射 Dependent Mapping的更多相关文章
- TFS二次开发04——工作区(Workspace)和映射(Mapping)
在前面几节介绍了怎样读取TFS服务器上的项目以及文件的信息,这一节将介绍怎么建立服务器和本地的映射(Mapping). 引用命名空间 usingMicrosoft.TeamFoundation.Cli ...
- ES 12 - 配置使用Elasticsearch的动态映射 (dynamic mapping)
目录 1 动态映射(dynamic mapping) 1.1 什么是动态映射 1.2 体验动态映射 1.3 搜索结果不一致的原因分析 2 开启dynamic mapping策略 2.1 约束策略 2. ...
- 【IPC进程间通讯之三】内存映射文件Mapping File
IPC进程间通信+共享内存Mapping IPC(Inter-Process Communication.进程间通信). 文件映射(Mapping)是一种 ...
- 18.AutoMapper 之条件映射(Conditional Mapping)
https://www.jianshu.com/p/8ed758ed3c63 条件映射(Conditional Mapping) AutoMapper 允许你给属性添加条件,只有在条件成立的情况下该成 ...
- 15. AutoMapper 之映射继承(Mapping Inheritance)
https://www.jianshu.com/p/e4f05403bd13 映射继承(Mapping Inheritance) 映射继承有两个功能: 从基类或接口配置继承映射配置 运行时多态映射 继 ...
- 06.AutoMapper 之内联映射(Inline Mapping)
https://www.jianshu.com/p/623655d7cb34 内联映射(Inline Mapping) AutoMapper在 6.2 以上版本将动态创建类型映射. 当第一次调用Map ...
- LR之配置端口映射(port mapping)
1.那些协议需要配置 tools-recording_options-network-port mapping 2.定义端口映射 3.自动检测原理 4.特殊情况
- (18)zabbix值映射Value mapping
1. 介绍 zabbix为了显示更人性化的数据,在使用过程中,我们可以将获取到得数据映射为一个字符串. 比如,我们写脚本监控MySQL是否在运行中, 一般返回0表示数据库挂了,1表示数据库正常,还有各 ...
- 映射器Mapping
1) org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping(核心) 将程序员定义的Action所对应的<bean& ...
随机推荐
- ASP.NET方面的一些经典文章收集
1. 在ASP.NET中执行URL重写 文章地址:https://msdn.microsoft.com/zh-cn/library/ms972974.aspx 2. 在ASP.NET中如何实现和利用U ...
- 仿Android网易新闻客户端,并增加水平图片滑动,改进阅读体验
仿网易新闻Android端APP 主要功能展示和代码实现 差不多花了一周的时间,目前实现的了新闻下的包括头条.体育.娱乐的一系列的新闻展示,以及点击后进入的新闻详情展示. 目前效果 目前效果请访问该网 ...
- Android6.0动态权限申请步骤以及需要注意的一些坑
因为工作需要,简单研究了一下Android6.0权限申请,在Google提供的sample的基础上,写了一个简单的demo.算是自己的笔记吧,可能会比较混乱,主要是方便以后查看.后期有别的问题,随时更 ...
- iOS开发——动画编程Swift篇&(四)CABasicAnimation动画
CABasicAnimation动画 //CABasicAnimation-不透明度 @IBAction func cabOpacity() { let animation = CABasicAnim ...
- [原创]SSIS-WMI 数据读取器任务:监控物理磁盘空间
背景: 随着时间的推移,我们的DW会越来越大,也就意味着磁盘空间会越来越小,那如果哪一天留意不当,就会造成磁盘空间的不足而导致ETL失败,最终影响我们的系统的数据正确性和使用,更严重的有可 ...
- History(历史)命令用法15例
导读 如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率,本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTTIMEFOR ...
- spring security源码分析之一springSecurityFilterChain
1. spring和spring security的集成,配置web.xml如下: <context-param> <param-name>contextConfigLocat ...
- Linux服务器集群系统(二)--转
引用地址:http://www.linuxvirtualserver.org/zh/lvs2.html LVS集群的体系结构 章文嵩 (wensong@linux-vs.org) 2002 年 4 月 ...
- 计算圆周率 Pi (π)值, 精确到小数点后 10000 位 只需要 30 多句代码
大家都知道π=3.1415926……无穷多位, 历史上很多人都在计算这个数, 一直认为是一个非常复杂的问题.现在有了电脑, 这个问题就简单了.电脑可以利用级数计算出很多高精度的值, 有关级数的问题请参 ...
- 跨平台高效率Lua网络库 ( 同步形式的API ,底层是异步非阻塞)
Joynet 项目地址:https://github.com/IronsDu/Joynet 介绍 high performance network library for lua, based on ...