一个概念只有将其放到一个具体的上下文中,其含义和作用才会清晰、明确。脱离了上下文,概念就失去了其价值和生命力。所以,学习使用任何技术或概念的时候,有一件事情是非常重要的,那就是透彻地理解该技术概念所位于的上下文,这将有助于我们更好地使用和驾驭这个技术。
在ORM流行的今天,数据访问框架层出不穷,但是这些框架所基于的上下文几乎都会有些不一样,要想将一个数据访问框架运用得炉火纯青,必须要掌握该框架所基于的上下文。同理,如果你想发挥DataRabbit框架的巨大威力,在之前,你绝对有必要了解一下DataRbbit的上下文。
一.纯ORM ?
在DataRabbit发展过程中,我曾作了一个非常重要的决定:不能把DataRabbit定位为一个纯粹的ORM框架,即所有的数据访问功能都基于ORM来实现。原因很简单,ORM并不能完成所有的事情(即使能完成所有的事情,那么也需要花费巨大的代价),有些数据库访问还是需要基于关系来进行,对于那些不提供基于关系进行数据访问操作的纯ORM框架,我认为其决策是不明智的。所以,在DataRabbit中,基于ORM的数据访问和基于关系的数据访问各占了一半的天空,这使得我们在无法用ORM达成或很难使用ORM达成的地方,可以转向使用基于关系的访问器来达成。
除了核心的ORM访问器和基于关系的访问器来访问数据表中的数据外,DataRabbit还提供对数据表的“大纲”进行访问和操作的功能,这是因为我们经常有这样的需求:获取数据表的某个字段的信息、或找到主外键关系、或者需要动态创建一个具有指定大纲的数据表。目前版本的DataRabbit提供的大纲操作功能还比较单薄,以后会逐渐进行增强。
二.DataRabbit中的核心理念
1.轻量、弱侵入性。比如,DataRabbit对你的数据库设计没有任何要求(而有的数据访问框架可能要求数据表必须有唯一主键)。
2.约定优于配置。使用DataRabbit不需要任何配置,这使得DataRabbit更加易用。
3.数据库类型无关性。统一的数据访问接口屏蔽了数据库类型的差异,目前版本的DataRabbit内置了对SqlServer和Oracle的支持,可以通过插件的方式来支持其它类型的数据库。
4.DataRabbit中的所有数据访问功能都是由各种访问器(如IOrmAccesser、IRelationAccesser、ITableAccesser、IDataSchemaAccesser、IEntityRelationLoader、ISPAccesser)来提供的。
5.所有的访问器接口的引用都可以从DataRabbit的根(“Root”)获得,在DataRabbit中,这样的根有两个,一个是IDataAccesser接口,另一个是TransactionScope。
6.一个根(“Root”)实例就对应着一个数据库。也可以这么说,针对一个特定的数据库,我们的应用只需要维护一个DataRabbit Root即可。
7. DataRabbit提供的所有的访问器(如IOrmAccesser)都可以在两种环境中工作:事务环境和非事务环境。这是由所有的访问器都继承了的ItransactionAccesser这个接口体现出来的。
8.任何一个访问器实例,如果在非事务环境中工作,那么它就是无状态的,DataRabbit将以Singleton的模式提供它的实例;如果访问器实例工作于事务环境中,那么它就是有状态的,并且它的生命期将随事务的结束而结束,DataRabbit以“Single Call”的模式提供它的实例。
三.DataRabbit中的ORM理念
DataRabbit所采用的ORM理念非常单纯、简单,其主要特点如下:
1.ORM仅仅对单表进行操作,不支持多表联合访问。对于多表联合访问的ORM解决方案,我还没有一个好的主意。
2.数据库中的一个数据表Table就对应着一个Entity Class定义,它们之间是一对一的映射关系。
(1)为了省去不必要的麻烦,Entity Class的类名最好与对应的Table的名字完全一致。这样DataRabbit可以方便地根据Entity Class的名字找到数据库中对应的表,或者反过来。
(2)Table中的每个列对应着Entity Class中的一个属性,列和属性的名字要求完全一致,并且,它们的类型是匹配的。
(3)Table中的一条记录就对应着一个Entity Object。
3.ORM数据访问操作的定义不是位于Entity Class中,而是定义于专门的ORM访问器(IOrmAccesser)中。从这个意义上来说,Entity Class更像是一个仅仅封装了数据的结构,而不是一个类。
4.ORM访问器采用泛型和反射技术实现,这样,DataRabbit只需要提供一个ORM访问器类,便可以对数据库中的所有表进行ORM访问。
5.ORM访问器通过泛型参数来标志要访问哪个表。泛型参数还有一个好处是,所有的ORM访问操作都是强类型的。
6.使用Filter来表示单个的查询条件。ORM的一个非常重要的目的,就是屏蔽所有的SQL语句,所以Sql条件子句也需要被抽象建模。
7.使用IFilterTree接口来抽象复杂的多个查询条件的组合。
四、DataRabbit对N层架构提供支持
DataRabbit在设计实现的时候,就考虑了如何更好的支持系统架构,所以,DataRabbit可以非常平滑无缝地融合到3层/N层架构中。关于这方面的详细介绍可参见:DataRabbit 轻量的数据访问框架(12)-- 将DataRabbit融入架构
分享到:
相关推荐
1. **创建阶段**:在这个阶段,执行上下文会被初始化,其中的变量对象会被创建并填充。对于函数执行上下文来说,还会为函数的参数分配内存空间。 2. **活动阶段**:在这个阶段,执行上下文处于活跃状态,代码被执行...
上下文帮助\help.rtf 制作的RTF文件 上下文帮助\help.hpj 制作的HPJ文件 上下文帮助\help.hlp 制作的HLP文件 上下文帮助\autohelp 自动添加WinHelp帮助实例源码 上下文帮助\autohelp 自动添加...
* 1型文法(上下文有关文法):对规则有些限制。 * 2型文法(上下文无关文法):对规则的限制,例如 A → w。 * 3型文法(正规文法):规则是线性的,例如 A → aB。 上下文无关文法的重要性: 上下文无关文法...
### 对Linux内核中进程上下文和中断上下文的理解 #### 一、内核空间与用户空间 在探讨进程上下文和中断上下文之前,我们首先需要了解内核空间和用户空间的基本概念。 **内核空间**:内核功能模块运行在内核空间,...
在Android应用开发中,上下文菜单(Context Menu)和上下文操作模式(Contextual Action Mode)是两种常见的用户交互设计,它们提供了在特定情境下对数据进行操作的界面。这两种设计模式在处理列表、网格或其他可选元素...
在Java设计模式中,上下文对象模式用于封装与用户或正在处理的请求相关的上下文(状态和行为),以将Java应用程序组件与环境的复杂性解耦。本文将详细介绍该模式的意图、解释、编程示例、适用场景、实际应用、优点和...
形状上下文(Shape Context)是一种在计算机视觉领域用于形状识别和匹配的强大工具。它通过量化形状边缘点到其他所有点的距离和角度,提供了一种描述形状局部和全局特征的方法。在Python中实现形状上下文可以帮助...
标题中的“CLR无法从COM上下文0x645e18转换为COM上下文0x645f88”是一个典型的COM组件交互时出现的问题,涉及到.NET Framework的公共语言运行时(Common Language Runtime, CLR)和COM(Component Object Model)的...
在Android开发中,上下文菜单(Context Menu)是一种常见的交互元素,它允许用户在长按某个视图或项时出现一个包含相关操作的弹出菜单。上下文菜单通常用于提供与特定视图或数据相关的动作选项,而不是全局的操作。在...
### WebLogic创建根上下文知识点解析 #### 一、WebLogic服务器简介 WebLogic Server是Oracle公司提供的一个应用服务器,主要用于构建和部署企业级应用程序。它支持Java EE标准,并提供了高性能、高可用性和可伸缩性...
当我们谈论“OC-多线程-上下文切换”时,我们实际上是在讨论Objective-C中多线程环境下的一个核心概念。上下文切换是操作系统调度线程执行的一种机制,它涉及到保存当前线程的状态并恢复另一个线程的状态,以便线程...
1. **创建图形上下文**:首先,我们需要创建一个图形上下文,通常是对屏幕、图片或者PDF文档的引用。在iOS中,通常通过`UIGraphicsBeginImageContext`或`UIGraphicsGetCurrentContext`来获取或创建图形上下文。 2. ...
1. MS 向 SGSN 发出激活 PDP 上下文请求,包括 NSAPI、TI、PDP 类型、APN、要求的 QoS、PDP 配置选项等信息。 2. SGSN 根据 MS 提供的激活类型、PDP 地址、APN,通过 APN 选择标准来解析 GGSN 地址,从而检查该请求...
### LTE Context(上下文)管理 #### 概述 在LTE(Long Term Evolution)网络中,为了确保用户设备(User Equipment, UE)与网络之间的高效通信,引入了上下文管理的概念。这一机制允许网络动态地存储和管理UE的相关...
### 基于上下文的知识表示和推理 #### 引言与背景 上下文的概念在多个学科领域中占据核心地位,特别是在语用学、自然语言处理、认知科学以及人工智能等交叉学科领域。从人工智能(AI)的角度来看,上下文不仅能够...
1. **计算上下文**:包括网络连接状态、通信成本、带宽、附近可用资源等。 2. **用户上下文**:涉及用户的个人信息、地理位置、社交情况等。 3. **物理上下文**:如光线强度、噪声水平、交通状况、温度等。 4. **...