Rafy领域实体框架重构ORM中的Sql生成设计

0 下载量 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语句,并且保持了与历史代码的兼容性,从而提高了框架的易用性和灵活性。