3,ORM组件XCode(简介)

2018-01-09 17:54:18 浏览数 (1)

    XCode是一个轻量级的ORM组件(对象与关系数据库映射),提供以面向对象的方式操作数据库的功能,能够解决90%以上的数据库操作场景。

    做为X系列组件最重要的一员,XCode秉承了简单实用的特点,力求以最简单的做法,解决最普遍的问题。

XCode最大的“缺点”就是“不支持”多表查询!为何不支持要加双引号?那是因为XCode实际上支持多表查询,只是用起来非常复杂,也不容易讲清楚,会严重影响基本功能的学习理解,所以逢人问到,我都回答不支持!至于缺点二字加双引号,是因为XCode有一整套替代方案,在绝大多数情况上,更优于多表查询。

    说XCode,就不得不提开发模式。每一个ORM组件,都是在某一种开发模式下,才能表现得最出色,XCode也不例外,我们称之为XCode开发模式。当然,每个人有自己的想法,有自己的开发习惯,可以尝试根据自己的习惯去使用XCode,或者稍微修改自己的习惯,也许能有更精彩的用法。

    XCode专注于对象与关系数据库映射,内部明显分为上下两层:

1,下层以DAL作为入口,IDatabase作为接口,各种数据库实现一个类,实现该接口以支持多数据库。DAL的两大代表是Select(查询SQL,返回DataSet)和Execute(执行SQL,返回影响行数),并且以SQL为key,有一级缓存的支持。DAL还支持DbCommand的查询和操作,不过就不受一级缓存的支持了。

image.pngimage.png

(DAL层结构图)

2,上层以Entity作为泛型基类,所有实体类继承于它。经典的LoadData能够把DataSet或者DataTable转化为实体对象集合,每行记录实例化一个实体对象,每个表字段的值赋值给实体对象的属性。所以,完全可以以别的方式得到DataSet,然后利用LoadData将其转为实体对象集合,而不一定需要DAL。可以得知,XCode支持视图,复杂查询或者多表查询可以通过视图变相解决,不过一般不推荐这么做。增删改查等操作,XCode实际上通过实体类的元数据等信息,动态拼接SQL,然后调用DAL层实现。

image.pngimage.png

(加载记录集和数据表)

image.pngimage.png

(执行插入操作,先拼接SQL,再执行)

    此两层结构说明,实际上就是XCode核心原理,任何人都可以根据这个原理来实现自己的ORM。至于结果组件的优劣程度,就看各自的功力以及对细节的考虑了。

XCode的理念是以面向对象为本,所以于本对象有关的东西都写在本对象内。所以XCode是一个充血模型

    所有查询操作(例如Find、FindAll、FindCount)都是静态方法,因为它与具体对象无关;而对象操作(例如Insert、Update、Save、Delete)都是成员方法,因为它与具体对象密切相关,代表着对具体对象的操作。这是XCode模型的基本思想,同样,为实体类编写业务代码的时候,也应该严格遵循该原则,哪些应该是静态的,哪些应该是成员的,要严格分开。

    当然,XCode实体类也支持贫血模型的一些操作方式,只不过操作类还是自身而已,比如Insert、Update、Save、Delete也有静态方法,而参数就是实体类对象。

XCode的模型,还有一个很重要的意义,就是完全满足数据源组件ObjectDataSource的要求,使得XCode实体类可以直接充当数据提供者。

image.pngimage.png
image.pngimage.png

(成对出现的FindAll/FindCount,参数完全一摸一样,正是ObjectDataSource的要求)

    本文仅是XCode的一个简介,说明XCode的结构和开发模式,更详细的说明请关注后文。

0 人点赞