博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3,ORM组件XCode(简介)
阅读量:7020 次
发布时间:2019-06-28

本文共 1615 字,大约阅读时间需要 5 分钟。

    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的查询和操作,不过就不受一级缓存的支持了。

(DAL层结构图)

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

(加载记录集和数据表)

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

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

 

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

 

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

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

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

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

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

 

大石头

新生命开发团队

2010-08-20 00:36

我不相信神话,我只相信汗水!我不相信命运,我只相信双手!
分类:
本文转自大石头博客园博客,原文链接:http://www.cnblogs.com/nnhy/archive/2010/09/13/1824666.html,如需转载请自行联系原作者
你可能感兴趣的文章
Java 集合系列01之 总体框架
查看>>
Visual Paradigm 教程[UML]:创建一个具有刻板印象的类
查看>>
安装flashplugin提示依赖libgdk-pixbuf2.0-0
查看>>
神奇的时间戳
查看>>
华为最新众包项目已发布,6万+项目费等你领
查看>>
停掉一台服务器,Nginx响应慢
查看>>
Install the python development environment
查看>>
2014-10-17(脚本练习)
查看>>
栈实现表达式求值
查看>>
Linux批量修改多台服务器的主机名(hostname)
查看>>
JVM 参数
查看>>
网络管理必备工具软件精解(Windows版)---转载及个人见解
查看>>
Status Text: BADRESPONSE: Unexpected token <
查看>>
java.lang.ClassNotFoundException: org.apache.St...
查看>>
linux shell脚本用while read逐行读取文本的问题
查看>>
Git使用过程中遇到的问题
查看>>
Python标准库学习笔记1:文本
查看>>
Puppet 之 相关概念和命令介绍
查看>>
高性能Web服务之lnmmp架构应用
查看>>
最完美解决Nginx部署ThinkPHP项目的办法
查看>>