企业应用架构模式读书笔记(2)
778 views| 2008-11-06| 李先静| 沉思录| | 发表评论转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli@gmail.com>
把SQL访问从领域逻辑中分离出来:行数据入口和表数据入口。行数据入口对象对应数据库中表的一行数据。表数据入口对象和记录集差不多,对应表中的多行数据。
把相关领域逻辑移入行数据入口中,行数据入口不但拥有数据,而且拥有行为,这就行成了活动记录。
活动记录适用于领域逻辑复杂度适中的情况,如果领域逻辑复杂度较大,需要按领域模型来组织系统结构,此时,数据对象与数据库中的表不再是一一对应的关系,这时一般采用数据映射器。
视图相当于一张虚表,和真正表之间差别在于只能读取不能修改。
管理内存中的数据对象和数据库中的数据,保持它们的一致性,是一件复杂的事。可以采用工作单元,让工作单元跟踪所有从数据库读取的对象以及所有以任何形式修改过的对象,并由它把数据对象提交到数据库中。
把同一个数据对象加载两次,也即有两个数据对象对应于数据库中同一行数据,这可能产生非常糟糕的后果。可以采用标识映射来保持数据对象的唯一。标识映射一个附带的好处是能提高性能。
如果使用领域模型,对象之间的关系可能比较复杂,产生裙带关系,加载一个对象会附带加载一大堆对象,这时可以采用延迟加载。这和代理模式差不多,先生成一个代理,真正用到该对象时才去加载。
对象之间的关联可以通过外键映射来实现。
一个人有多种技能,并且要知道多少人具备某一项技能,这是一种多对多的关系,关系数据库不能直接解决这类问题,而是通过关联表映射来实现。
通过序列化LOB可以节省大量数据库开销。
继承关系与数据库的映射方法有:
1.单表继承:让所有类都映射到同一个表中,这张表拥有所有父类/子类全部的域。因为数据库会压缩没有用到的域,不会浪费多少空间,而且使用更简单。
2.具体表继承:每个子类对应一张独立的表。
3.类表继承:每个类都对应一张独立的表。
同一个数据对象对应多个数据源时,可以建立多个映射层。
元数据映射:用元数据文件来描述映射关系,通过代码产生或者反射编程来完成映射,这可以大大减少重复的代码。
使用数据连接池,可以避免频繁建立/断开连接的性能开销。
可以把连接的建立/断开与事务关联起来,以避免连接泄露。
Share
Tags
Recent Posts
Most Viewed
- 系统程序员成长计划写作提纲 - 19,605 views
- Android IPC机制详解 - 6,277 views
- 系统程序员成长计划-走近专业程序员(上) - 6,253 views
- 系统程序员成长计划-写得又快又好的秘诀(一) - 5,391 views
- 系统程序员成长计划-背景知识 - 5,070 views
- i++循环与i–循环的执行效率 - 4,712 views
- 系统程序员成长计划-Write once, run anywhere(WORA)(上) - 4,701 views
- 系统程序员成长计划-走近专业程序员(下) - 4,254 views
- Linux下的调试工具 - 4,017 views
- Advanced Linux Sound Architecture (ALSA) 研究笔记 - 4,017 views
- 系统程序员成长计划-序 - 3,985 views
- 系统程序员成长计划-写得又快又好的秘诀(三) - 3,930 views
- 中国人与自由软件文化研究(搞笑版) - 3,735 views
- Android中的MessageQueue,Handler,Looper和Thread - 3,686 views
- 答复:我不会OOO,仍然可以XXX - 3,659 views
Categories
- Android (28)
- Broncho-A1-Hack (6)
- DirectFB (7)
- FTK(嵌入式GUI) (24)
- GTK+ (29)
- KVM hack notes (8)
- Linux Mobile (65)
- Management (5)
- Mozilla (9)
- Open Source (5)
- Programming (34)
- Tools (9)
- Uncategorized (23)
- Win32 (3)
- X Windows (31)
- 沉思录 (29)
- 系统程序员成长计划 (67)
Blogroll
gallery
Linux guru
推荐网站
Recent Comments
- Dig on 嵌入式GUI FTK设计与实现-事件源(FtkSource)
- 用心生活每一天 » GNU gprof: linux profiling tools 使用 on gcc profiling的工作原理
- JavaScript for: i++ vs i–-传播、沟通、分享-一直“有你” on i++循环与i–循环的执行效率
- Frankly Law on 嵌入式GUI FTK介绍(11)-交叉编译
- tracing on Linux下的调试工具
- ndljsn on FTK移植指南(初稿)
- tracing on 爬塘朗山
- tracing on GTK+(基于DirectFB)的字体处理
- Kely on 系统程序员成长计划写作提纲
- tracing on 爬塘朗山



November 6th, 2008