InstantObjects参考 - delphi的ORM实现

武琛
2023-12-01

1.0    概述

本文档是关于构建基于InstantObjects框架的参考手册。

       主要包括以下三个部分:

l        建立业务模型

l        建立用户接口

l        使用持久化对象编程

 

2.0    建立业务模型

2.1    业务模型

所谓业务模型就是指domain,建立持久化类对象与数据表的映射。InstantObjects业务模型包括一系列用户定义的类,继承和关联关系。InstantObjects framework 提供了几种class attribute types方便相关类的实例的持久化。

2.1.1        Container attributes

是指下面的几种属性,称容器属性

2.1.2    ReferenceSee TInstantReference for more information

这是InstantObjects支持的一种简单对象关系。一个对象可以单向的引用到另一个对象。

2.1.3          PartSee TInstantPart for more information.

这种模式关联更加紧密。Part relation是一种双向的关联,这意味关联的双方都知道对方的存在。类似于宿主对象与从对象的关系,从对象随着主对象的销毁而销毁。

2.1.4          ReferencesSee TInstantReferences for more information.

Reference一样,也是单向关联。但它通过定义与关联对象的一对多关系,可以关联到多个对象。

2.1.5          Parts(See TInstantParts for more information)

Part的一对多关系表现。

2.2     The InstantObjects Model Explorer 

它是IDE设计器,用于建立类和关系以定义业务模型.

通过设计器可以方便地手工定义一个类。

2.3    增加业务规则

通过在业务对象的BeforeStore方法上描述。

procedure TContact.AfterCreate;

var

  vCategory: TCategory;

begin

  inherited;

  Id := InstantGenerateId;

  vCategory := TCategory.Retrieve('CAT000');

  try

    Category := vCategory;

  finally

    vCategory.Free;

end;

       可重载的方法有:

       AfterRetrieve, BeforeStore, AfterCreate

 

2.4    Building/Evolving the Business Model 

l         Build 删除所有的表后重建

l         Evolution 尽量保留原有的数据,它的效果取决于所使用的数据库

l         从己有的业务对象映射生成物理数据表,步骤如下:右键新增一种类型的连接器,重定义为一个有意义的名字,按ctrl+E或修改连接器的属性,接着按build进入数据库建立向导画面,点击show Build Sequence,显示出所有的数据库操作,包括建立数据表和索引。点击build database就会自动生成所需的数据库。

实现原理类似于java里的Docklet,数据表的元数据定义在代码的注释中。

 

3.0    建立用户接口

第二阶段的工作是定义用户与业务对象交互的接口。

3.1    Persistence by RAD 

允许使用原有的数据感知控件持久化。

       3.2 The Connector 

       Connector充当你的应用和数据库之间的网关,负责一切与数据库之间的操作。

3.2    TConnectionManager

通过将connection数据保存在外部文件中,可以自动建立多个Connector

3.3    The Exposer 

TInstantExposer是数据集组件,它负责把实体对象映射到用户接口上。它将published属性映射到字段上。

3.4    The Selector 

TInstantSelector是一个数据集组件,可以从数据库中选择对象,并有选择地将它们暴露给用户接口。这种查询语言叫做Instant Query Language。与HibernateHql类似。

 

SELECT [DISTINCT] *|<Attribute>

FROM [ANY] <Class>

[WHERE <Expression>]

[ORDER BY <Attribute list>]

4.0    Programming with Persistent Objects

基本InstantObjects的编程模型有一些规范或者说限制,业务对象类必须从TInstantObject继承,并且包含业务逻辑的方法,类似于一个DAO类。

保存对象调用store方法,id值在存储前给值。

查询时如果没有指定connector 参数,将使用默认的Connector

5.0    小结

java世界里,实现对象关系映射的框架非常多,如Hibernate,IBatis,TopLink,JDO,Ofbiz中的实体引擎等。但由于java本身的特性,如虚拟机,动态代理,AOP的存在,使得它能做出很强大的功能,如声明式事务。这些是VCL框架所不具备的。所以从这点上来看InstantObjects这个基于VCL的轻量级框架,已经很优秀,对于中小型的桌面系统,可以将service层和Data access层合并在InstantObject,当然也可以使用RemoteObject作为Service层,发布为WebService应用。

有了InstantObject之后,就不用再直接面对字段,可轻易变更数据源,更重要的是编码是更加OO

之所以研究InstantObjects,是因为打算用它做一个“个人信息管理”的应用程序,主要包括个人财务管理,人际关系管理,知识管理,计划行程等方面的内容。有兴趣的朋友可以联系我。

6.0    参考资料

InstantObjects Guid 2.0

 

 类似资料: