Delphi的ORM框架:InstantObjects类图与介绍
2012-01-16 03:25
225 查看
======================================================
注:本文源代码点此下载
======================================================
标签:delphi
orm
instantobjects io
(开头先从网上抄些orm的介绍)
什么是orm?
orm,即object-relational mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射。orm也可理解是一种规范,具体的orm框架可作为应用程序和数据库的桥梁。这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的sql语句打交道,只需简单的操作对象的属性和方法。
为什么需要orm
面向对象的程序设计语言,代表了目前程序设计语言的主流和趋势,其具备非常多的优势,比如:
1、 面向对象的建模、操作。
2、 多态、继承。
3、 摒弃难以理解的过程。
4、 简单易用,易理解性。
但数据库的发展并未与程序设计语言同步,而且,关系数据库系统的某些优势,也是面向对象的语言目前无法解决的。比如:
1、 大量数据操作查找、排序。
2、 集合数据连接操作、映射。
3、 数据库访问的并发、事务。
4、 数据库的约束、隔离。
面对这种面向对象语言与关系数据库系统并存的局面,采用orm就变成一种必然。
instantobjects(简称io)
简介
io是用delphi实现的orm框架(http://www.instantobjects.org/)。io有以上描述的大部分优点,同时还有以下特点(演示io自带的demo:primercross):
1、 支持多种数据库;
2、 支持自动创建数据库和更新数据库结构;
3、 提供集成到ide里面的数据模型设计器;
4、 支持包括blob、memo等多种数据类型;
5、 支持1对多、多对多数据关系的映射;
6、 提供io对象的缓存与共享,生命周期的管理;
7、 提供io对象bin、xml格式的导入导出功能;
8、 提供iql查询语言;
io框架模型介绍
1、 io对象类图
该类图显示出了io是如何设计orm的运行期实体对象的。
io充分利用了delphi的rtti机制,动态生成实体对象的属性,实现丰富的数据映射功能。不过这种侵入式设计,同时带来了一定的复杂性。
2、 io对象元数据类图
元数据记录的是实体对象与数据库映射的信息。分两类:类的元数据、表的元数据。io框架根据元数据类,实现具体的数据到对象、对象到数据映射功能。
3、 数据库连接类图
这里列出的是io框架数据库部分的设计类图。
io框架使用了一套相对比较复杂的设计,目的是使后台支持sql型数据库(mssql、fb)、游览型数据库(dbisam、access、xml数据库)。io在这个设计基础上,提供了两种扩充支持数据库的方式,为框架提供了灵活的扩充功能。图中列出了当前计量使用的ibx控件扩充类(类名以“tinstantibx”开头)。
这个灵活通用的设计,同时带来了效率的问题。不能很好得利用sql型数据库的大量数据操作查找、排序等优点。在计量项目中,部分针对io的修改与扩展就是为了解决这个效率问题。
4、 导入导出类图
这图中列的类,提供了实体对象bin、xml格式的导入导出功能。
导入导出功能,方便应用程序实现数据模板,数据复制等应用功能。
5、 数据游览类图
这部分是io框架为了满足快速的数据感知控件开发而设计的。为实体对象的查询、游览提供数据访问功能(tdataset功能)。
由于数据全部通过访问实体对象而来,故在访问数据前必须先创建、初始化好实体对象,在效率与内存占用上都比一般的数据集差。
6、 iql类图
上面orm介绍中提到“查询语言,是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的sql语句紧密耦合”。不过当前很少使用到iql语言,对这方面的了解也比较少。
7、 异常机制类图
时序图
用id获取io对象
io对象保存过程
io对象对应数据记录删除过程
io框架的优化讨论
1、 增加属性的迟加载(lazy load)功能
增加这个功能的目的是为了提高实体对象实例化速度,减少内存使用。小骆在2.0io版本中增加过该功能。
2、 增加属性对象的缓存机制
io实体对象的属性是一个真实的对象,一个实体对象会含有多个属性对象,属性对象的创建与释放次数是很多的。由于属性对象种类比较固定,可以考虑增加属性对象缓存池,解决大量的对象创建、释放带来的效率慢及内存碎片问题。
(以上uml图,都是用modelmaker制作)
本文出自 “seewind” 博客,请务必保留此出处http://seewind.blog.51cto.com/249547/56111
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定
这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
注:本文源代码点此下载
======================================================
标签:delphi
orm
instantobjects io
(开头先从网上抄些orm的介绍)
什么是orm?
orm,即object-relational mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射。orm也可理解是一种规范,具体的orm框架可作为应用程序和数据库的桥梁。这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的sql语句打交道,只需简单的操作对象的属性和方法。
为什么需要orm
面向对象的程序设计语言,代表了目前程序设计语言的主流和趋势,其具备非常多的优势,比如:
1、 面向对象的建模、操作。
2、 多态、继承。
3、 摒弃难以理解的过程。
4、 简单易用,易理解性。
但数据库的发展并未与程序设计语言同步,而且,关系数据库系统的某些优势,也是面向对象的语言目前无法解决的。比如:
1、 大量数据操作查找、排序。
2、 集合数据连接操作、映射。
3、 数据库访问的并发、事务。
4、 数据库的约束、隔离。
面对这种面向对象语言与关系数据库系统并存的局面,采用orm就变成一种必然。
instantobjects(简称io)
简介
io是用delphi实现的orm框架(http://www.instantobjects.org/)。io有以上描述的大部分优点,同时还有以下特点(演示io自带的demo:primercross):
1、 支持多种数据库;
2、 支持自动创建数据库和更新数据库结构;
3、 提供集成到ide里面的数据模型设计器;
4、 支持包括blob、memo等多种数据类型;
5、 支持1对多、多对多数据关系的映射;
6、 提供io对象的缓存与共享,生命周期的管理;
7、 提供io对象bin、xml格式的导入导出功能;
8、 提供iql查询语言;
io框架模型介绍
1、 io对象类图
该类图显示出了io是如何设计orm的运行期实体对象的。
io充分利用了delphi的rtti机制,动态生成实体对象的属性,实现丰富的数据映射功能。不过这种侵入式设计,同时带来了一定的复杂性。
2、 io对象元数据类图
元数据记录的是实体对象与数据库映射的信息。分两类:类的元数据、表的元数据。io框架根据元数据类,实现具体的数据到对象、对象到数据映射功能。
3、 数据库连接类图
这里列出的是io框架数据库部分的设计类图。
io框架使用了一套相对比较复杂的设计,目的是使后台支持sql型数据库(mssql、fb)、游览型数据库(dbisam、access、xml数据库)。io在这个设计基础上,提供了两种扩充支持数据库的方式,为框架提供了灵活的扩充功能。图中列出了当前计量使用的ibx控件扩充类(类名以“tinstantibx”开头)。
这个灵活通用的设计,同时带来了效率的问题。不能很好得利用sql型数据库的大量数据操作查找、排序等优点。在计量项目中,部分针对io的修改与扩展就是为了解决这个效率问题。
4、 导入导出类图
这图中列的类,提供了实体对象bin、xml格式的导入导出功能。
导入导出功能,方便应用程序实现数据模板,数据复制等应用功能。
5、 数据游览类图
这部分是io框架为了满足快速的数据感知控件开发而设计的。为实体对象的查询、游览提供数据访问功能(tdataset功能)。
由于数据全部通过访问实体对象而来,故在访问数据前必须先创建、初始化好实体对象,在效率与内存占用上都比一般的数据集差。
6、 iql类图
上面orm介绍中提到“查询语言,是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的sql语句紧密耦合”。不过当前很少使用到iql语言,对这方面的了解也比较少。
7、 异常机制类图
时序图
用id获取io对象
io对象保存过程
io对象对应数据记录删除过程
io框架的优化讨论
1、 增加属性的迟加载(lazy load)功能
增加这个功能的目的是为了提高实体对象实例化速度,减少内存使用。小骆在2.0io版本中增加过该功能。
2、 增加属性对象的缓存机制
io实体对象的属性是一个真实的对象,一个实体对象会含有多个属性对象,属性对象的创建与释放次数是很多的。由于属性对象种类比较固定,可以考虑增加属性对象缓存池,解决大量的对象创建、释放带来的效率慢及内存碎片问题。
(以上uml图,都是用modelmaker制作)
本文出自 “seewind” 博客,请务必保留此出处http://seewind.blog.51cto.com/249547/56111
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定
这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
相关文章推荐
- Delphi的ORM框架:InstantObjects类图与介绍
- Delphi的ORM框架:InstantObjects类图与介绍
- DELPHI的字符截取函数LEFTSTR, MIDSTR, RIGHTSTR的介绍以及字符串拆分
- 14.Delphi简单数据库应用的创建及MASTAPP介绍
- delphi——文件后缀名、工作区域介绍
- UML 类图介绍
- Delphi历史版本介绍(一)从Delphi1到Delphi7
- DELPHI窗体属性介绍
- Delphi中几种关闭方法的介绍和比较(转)
- ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate) 【ECG】4.3 介绍
- 【EF 4】ORM框架及其流行产品之一EF介绍
- Delphi中的包介绍
- Delphi7.0自带Indy 9基础介绍
- Delphi 变体类型(Variant)的介绍(流与变体类型的相互转换、变体类型常用的函数)
- Android版Ibatis开源的ORM框架Aibatis介绍
- delphi中的各种文件类型介绍
- UML 类图介绍
- UML中的常用基础类图元素详细介绍大全
- ORM框架的简单介绍
- 轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)