资讯专栏INFORMATION COLUMN

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

chenatu / 1022人阅读

摘要:如果数据非常类似,可把数据从内存方案中转化到逻辑数据存储方案,映射从逻辑数据存储方案到实际物理存储方案第二部包含区别使用元数据元数据映射基于把映射浓缩到元数据文件的方法。元数据文件详细描述数据库中列如何映射到对象的域。

关系数据库之所以取得成功,最重要的原因之一就是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. 使用元数据:

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

7. 数据库连接:

数据库连接池

8. 其他问题:

select * from 的问题

多使用预编译好的静态SQL

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30018.html

相关文章

  • 第十三天-企业应用架构模式-对象-关系数据映射模式

    元数据映射 (Metadata Mapping) 查询对象 (Query Object) 资源库 (Repository)

    Jochen 评论0 收藏0
  • 第十一天-《企业应用架构模式》-对象-关系行为模式

    摘要:工作单元用于维护受业务事务影响的对象列表,并协调变化的写入和并发问题的解决。工作单元控制器工作单元控制所有数据库的读操作,一旦对象被读取,将将它注册为干净的对象。 1. 工作单元 用于维护受业务事务影响的对象列表,并协调变化的写入和并发问题的解决。如下: showImg(https://segmentfault.com/img/remote/1460000018095222?w=162...

    KavenFan 评论0 收藏0
  • 从小白程序员一路晋升为大厂高级技术专家我看过哪些书籍?(建议收藏)

    摘要:大家好,我是冰河有句话叫做投资啥都不如投资自己的回报率高。马上就十一国庆假期了,给小伙伴们分享下,从小白程序员到大厂高级技术专家我看过哪些技术类书籍。 大家好,我是...

    sf_wangchong 评论0 收藏0
  • 第十二天-《企业应用架构模式》-对象-关系结构模式

    摘要:标识域外键映射关联表映射依赖映射嵌入值序列化单表继承类表继承具体表继承继承映射器 1.标识域 (Identity Field) 2.外键映射 (Foreign Key Mapping) 3.关联表映射 (Association Table Mapping) 4.依赖映射 (Dependent Mapping) 5.嵌入值 (Embedded Value) 6.序列化LOB (Seral...

    lsxiao 评论0 收藏0
  • UDTS上线数据集成服务,汇聚多源数据帮助企业高效分析决策

    摘要:推出数据集成服务,可轻松帮助用户完成多源聚合。数据集成服务案例数据脱敏某教育企业,使用数据集成服务,将数据脱敏处理后,再交由内部其它部进行数据分析,提取数据的有效价值。既避免了敏感数据泄漏风险,又帮助企业更快更精准的决策。背景由于不同业务的数据存储和应用需求不同,企业通常会将不同业务产生的数据分别存储在独立的数据库中。随着业务架构的不断调整,以及受开发过程的影响,原先分开存储的数据库逐渐暴露...

    Tecode 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<