在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
(开头先从网上抄些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 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论