Rafy领域实体框架重构ORM中的Sql生成设计
112 浏览量
更新于2024-08-27
收藏 516KB PDF 举报
Rafy领域实体框架设计-重构ORM中的Sql生成
Rafy领域实体框架作为一个使用领域驱动设计作为指导思想的开发框架,必然要处理领域实体到数据库表之间的映射,即包含了ORM的功能。由于在09年最初设计时,ORM部分的设计并不是最重要的部分,那里Rafy的核心是产品线工程、模型驱动开发、界面生成等。因此,当时,我们简单地采用了一个开源的小型ORM框架:《LiteORMLibrary》。
《LiteORMLibrary》是一个轻量级的ORM框架,采用在实体对象上标记特性(Attribute)来声明实体的元数据,并使用链式接口来作为查询接口以方便开发人员使用。这是一个简单、易移植的ORM框架,对初次使用、设计ORM的同学来说,可以起到一个很好的借鉴作用。相关的设计,可以参考LiteORM的原文章:《LiteORMLibraryV2》。
但是,随着不断使用,我们也不断对ORM的源码做了不少改动,让它在支持简单语句生成的同时,也支持让开发人员直接使用手动编写的Sql语句来查询领域实体。但是过程中,一直没有修改最核心的Sql语句生成模块。随着应用的不断深入,遇到的场景越来越多,需要生成复杂Sql语句的场景也越来越多。而这些场景如果还让开发人员自己去编写复杂Sql语句,不但框架的易用性下降,而且由于写了过多的Sql语句,还会让开发人员面向领域实体来开发的思想减弱。
因此,我们对Sql语句生成模块实施了重构。与其说是重构,不如说重写,因为90%LiteORM的类库都已经不再使用。但是又不得不面对对历史代码中接口的兼容性问题。接下来,将说明本次重构中的关键技术点。
在重构过程中,我们需要解决两个主要的问题:一是如何生成复杂的Sql语句,二是如何保持与历史代码的兼容性。为了解决这两个问题,我们采取了以下几个步骤:
首先,我们对Sql语句生成模块进行了重写,并引入了新的Sql语句生成算法,使得生成的Sql语句更加灵活和强大。其次,我们对历史代码中的接口进行了修改,使得它们与新的Sql语句生成模块保持兼容性。
在新的Sql语句生成模块中,我们引入了一个新的概念:Sql语句生成上下文。这个上下文中包含了所有相关的信息,例如实体对象、数据库连接、Sql语句模板等。通过这个上下文,我们可以生成更加复杂的Sql语句,例如join、subquery等。
此外,我们还引入了一个新的Sql语句生成算法,这个算法可以根据不同的数据库管理系统生成相应的Sql语句。例如,对于Oracle数据库,我们可以生成带有绑定变量的Sql语句,而对于MySQL数据库,我们可以生成带有参数的Sql语句。
在保持与历史代码的兼容性方面,我们采取了以下几种方法:首先,我们对历史代码中的接口进行了修改,使得它们与新的Sql语句生成模块保持兼容性。其次,我们提供了一些兼容性接口,使得历史代码可以继续使用新的Sql语句生成模块。
通过这次重构,我们成功地解决了Sql语句生成模块的两个主要问题:生成复杂的Sql语句和保持与历史代码的兼容性。新的Sql语句生成模块可以生成更加复杂的Sql语句,并且保持了与历史代码的兼容性,从而提高了框架的易用性和灵活性。
2021-10-26 上传
点击了解资源详情
2022-07-25 上传
2022-07-25 上传
2022-07-25 上传
2021-05-28 上传
2022-07-25 上传
2024-11-28 上传
weixin_38720322
- 粉丝: 4
- 资源: 921
最新资源
- Raspberry Pi OpenCL驱动程序安装与QEMU仿真指南
- Apache RocketMQ Go客户端:全面支持与消息处理功能
- WStage平台:无线传感器网络阶段数据交互技术
- 基于Java SpringBoot和微信小程序的ssm智能仓储系统开发
- CorrectMe项目:自动更正与建议API的开发与应用
- IdeaBiz请求处理程序JAVA:自动化API调用与令牌管理
- 墨西哥面包店研讨会:介绍关键业绩指标(KPI)与评估标准
- 2014年Android音乐播放器源码学习分享
- CleverRecyclerView扩展库:滑动效果与特性增强
- 利用Python和SURF特征识别斑点猫图像
- Wurpr开源PHP MySQL包装器:安全易用且高效
- Scratch少儿编程:Kanon妹系闹钟音效素材包
- 食品分享社交应用的开发教程与功能介绍
- Cookies by lfj.io: 浏览数据智能管理与同步工具
- 掌握SSH框架与SpringMVC Hibernate集成教程
- C语言实现FFT算法及互相关性能优化指南