第三天-《企业应用架构模式》-映射到关系数据库

关系数据库之所以取得成功,最重要的原因之一就是SQL的存在,它是数据库通信标准语言。

1. 架构模式:

驱动领域逻辑访问数据的方式:

SQL语句嵌入在程序设计语言中;

行数据入口、表数据入口:

把SQL访问从领域逻辑中分离出来,并把它放到独立的类中(让它们以数据库中的表结构为基础,每一个数据表对应一个类),这些类为数据库建立了一个入口;

活动记录:

领域模型简单时,每个领域对象负责对应数据库的表的存取过程

数据映射器:

领域模型复杂时,处理数据库和领域模型之间的所有存取操作,并且允许双方都能独立变化

面向对象数据库:

领域模型不管有多复杂,均可使用(因为风险,使用不多)。主要好处在于能够提高生产率!

2. 行为问题:

1)所谓行文问题,就是如何让个中对象从数据库中读取出来以及存到数据库中

2)工作单元:

充当数据库映射的控制器,会跟踪所有从数据库中读取的对象以及所有以任何形式修改过的对象,并将更新提交到数据库(用来解决内存对象和数据库中数据同步的问题)

3)标识映射:

在标识映射里记录读取的每一行,防止同一对象重复加载

4)延迟加载:

减少领域模型每次读取的数据

3. 读取数据:

1)查找器:

读取数据的时候,可以把读取数据的方法看做一个查找器

2)查找器对象:

如果数据库交互类基于表,把插入和更新操作也绑定在查找器方法中;

如果数据库交互基于行的类,创建独立的查找器对象(每个查找器类都有很多封装了SQL语句的方法,当执行查询操作时查找器对象返回一个适当的基于行的对象集合)

3)读取数据性能经验法则:

如果需要,尽量一次读取多行;

需要多个表数据时,使用Join

4. 结构映射模式:

1)关系的映射:

解决关系表间关联关系和对象间引用关系的方法:

通过对象中的一个标识域来保持每个对象的关系特性,并且通过查找这些值来保持对象引用和关系键之间的相互映射

对于一些小的值对象(比如日期范围和钱),不需要用标识域来把对象间引用变为外键(不应该描述成数据库中它们自己的表),而应去除值对象中所有的域,以嵌入值方式把它们嵌入到关联对象中

也可以通过序列化LOB将一组对象存储为表中的单个列

2)继承:

单表继承:

为继承体系层次中的所有类建立一个表(修改容易并且避免join,但每一行都必须为每种可能地子类博阿六一些列,浪费空间)

具体表继承:

为继承体系层次中每个具体类均建立一个表(避免join操作,允许从一个表中获取一个对象,但改变起来比较困难,如对超类的任何改变都不得不改变所有的表和映射代码)

类表继承:

为继承体系层次中每个类均建立一个表(需要多个join操作来载入一个对象,通常
会损失性能)

以上3种模式,需要考虑自己的环境和偏好(Martin倾向于:使用单表继承,用另外2个模式辅助来帮助解决不可避免的不相关和无用列问题)

5. 建立映射:

自己选择数据库方案:

使用经典数据库设计技术围绕数据来设计表,使用行数据入口或者表数据入口把SQL从领域逻辑中剔除

使用已存在数据库方案:

简单的领域逻辑可创建行数据入口或者表数据入口类来模拟数据库,并在此之上创建领域逻辑。复杂的逐步建立领域模型并包含数据映射器

对于多个数据源:

建立多个映射层,每个数据源一个。 如果数据非常类似,可把数据从内存方案中转化到逻辑数据存储方案,映射从逻辑数据存储方案到实际物理存储方案(第二部包含区别)

6. 使用元数据:

元数据映射基于把映射浓缩到元数据文件的方法。元数据文件详细描述数据库中列如何映射到对象的域。如:


image

7. 数据库连接:

数据库连接池

8. 其他问题:

select * from 的问题

多使用预编译好的静态SQL

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,894评论 2 89
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,169评论 0 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,084评论 1 32
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,423评论 0 4
  • 从媒介革命的视野出发,网络文学并不是通俗文学的“网络版”,而是一种新媒介文学形态。它颠覆的不是印刷文明下的雅俗秩序...
    王乓乓阅读 580评论 0 5