Openbiz框架的设计目标是使设计,开发和维护网络应用程序变的快捷和方便。Openbiz架构的主要创新是其基于元数据的设计。这意味着Openbiz对象是基于元数据文件中的描述的而创建的。对于Openbiz来说在大多数时间构建一个应用程序就相当于设置核开发的他的元数据文件。由于XML语言的自我解释这一特性,使得Openbiz的应用程序十分易于维护,与此同时Openbiz是如同XML语言一样也一个具有丰富可扩展的框架。
Openbiz核心对象
任何应用都可以由两部分组成-后端和前端。通常的主要业务逻辑运行在后端,而用户界面在前端。在Openbiz中,后端主要为“数据对象”或“服务对象”。前端主要有“表单对象”和“视图对象。”
数据对象
数据对象(又名“DO”)是一个数据单元。Openbiz数据对象将数据库中的表和关系映射到系统对象中。它在对象中封装了(创建,读取,更新和删除)等操作,并提供了高级搜索接口。
一个数据对象包含了一组字段,在典型的用法中,一个数据对象映射到数据库中的表,并且每一个字段映射到数据表中的列或者SQL表达式。
服务对象
服务对象是一个Openbiz的系统单元,其包含业务逻辑实现的一组函数(方法)。典型的Openbiz服务对象的范例是“用户身份验证服务” 和“电子邮件服务”
表单对象
表单对象是用户界面区块的单元,它包含了一组相关的表单控件,他可以是一个标准的HTML表单,一个带有工具栏和导航条的HTML表格,一个图片列表等。
一个表单对象包含了一组表单控件,它即可以是简单的也可以是高级的HTML控件。典型的使用方法是:一个表单对象映射到一个数据对象上,并把每一个表单对象上的表单控件分别映射到数据对象的字段上。
视图对象
视图对象实际上扮演了网页的页面。试图对象是表单对象的容器。你可以把视图对象(网页)想象为是地板,而表单对象就是依附在上面的瓷砖。
核心对象与元数据
核心的Openbiz对象是基于Openbiz元数据定义的。下面摘录的部分是一个数据对象的元数据,元数据的含义我们将在后续章节中讨论。
Openbiz框架将读取这样的元数据并且动态从“Openbiz对象工厂”中创建出这些对象。
Openbiz架构特点
多层面向对象设计
Openbiz是一个多层的面向对象设计。Openbiz应用程序被分为三层设计,表示层,业务逻辑层和数据集成层,在Openbiz中:
表示层是由Openbiz视图和表单实现的。Openbiz还有额外的Javascript库负责通过ajax的方式与服务器后端的表示层对象通信。
商业逻辑层是由Openbiz数据对象 和Openbiz服务对象 实现的。
第三方包,系统底层由Zend_DB来处理数据集成层的操作。
OpenbizMVC
Openbiz的一个关键性特性就是它是一个基于模块-视图-控制器(MVC)设计模式的框架。这一特点使得基于Openbiz开发的应用程序更加便于管 理。因为表示层(View)是与应用程序的数据和逻辑(Model)清晰的分离开的。所有用户与应用程序的交互全部由前端控制器来处理。
比较OpenbizMVC和市场上主流的MVC框架例如JSF和Strusts等,Openbiz框架更加接近JSF,因为他们同样是基于组件的结构。Openbiz的视图层包括了视图对象,表单对象和表单控件等组件,这些组件在处理请求时都是可被访问的。
Openbiz对象关系映射
Openbiz实现了必要的“对象关系映射”功能,允许数据对象代表数据库中的数据和关系。下列列表是Openbiz对象关系映射所实现的功能。
数据库抽象层
Openbiz数据对象可以通过Zend_DB来连接各种类型的关系型数据库,Zend_DB为Openbiz底层提供了在PDO和本地数据库客户端工具之上的数据抽象 层。开发人员可以使用Openbiz数据对象API来实现大部分的数据库操作,及直接调用Zend_DB API来完成高级功能。
如果需要连接不通类型的数据库,用户只需要在应用程序根目录的Config.xml中指定数据库连接即可。Openbiz数据对象将调用正确的数据库驱动程序去连接数据库服务器。Openbiz当前支持的数据库类型有MySQL, MSSQL, Oracle, PostgreSQL, SQLlite 等。
每一个Openbiz数据对象可以有它自己的数据库引用。此功能可以帮助您实现在一个应用程序中同时连接多个数据库。甚至在同一张网页上也可以连接多个数据源。
模版引擎
Openbiz表单对象和视图对象使用Smarty模版引擎来渲染默认的输出,由于Smarty是目前最流行的模板系统,开发人员可以轻松地学习如何渲染(显示)一个Openbiz页面。
在复杂的输出的情况下,很难在Smarty模板中进行实现。Openbiz允许用户使用PHP模版引擎,PHP模版系统也将提供比Smarty更高效率的渲染(显示)速度。
Openbiz代码结构
Openbiz核心类库和代码结构
openbiz_root/
—bin/ (openbiz核心PHP源代码)
——data/ (数据层类库)
———-private/ (数据曾私有类库)
——easy/ (新的展示层类库2.4后)
———-element/ (HTML表单控件类库)
——service/ (openbiz核心服务类库)
——ui/ (展示层类库)
———-private/ (展示层私有类库)
——util/ (工具解释器类库)
—languages/ (语言包)
—medata/ (openbiz元数据文件)
——service/ (openbiz服务包)
—others/ (第三方类库)
——Smarty/ (smarty包)
——zend/ (Zend 框架)
Openbiz执行流程
下图是在Openbiz应用程序中典型的由用户触发的数据查询的执行流程。
Openbiz和第三方类库
Openbiz尝试在系统中集成市场上最好的第三方类库,在Openbiz中大量使用的关键类库包括:
Zend 框架
Zend 框架。Openbiz在如下应用中使用了Zend 框架
- 数据库交互
- 多语言支持
- 数据有效性校验
- 电子邮件服务
- 高级缓存管理
- JSON编码和解码
- PHP模板
Smarty
Smarty模版系统。 Smarty 是系统的主要模板引擎,应用于Openbiz表单对象和视图对象。对于那些需要更加复杂渲染逻辑的模板,Openbiz表单对象使用了Zend框架提供的PHP模板引擎
Javascript
Javascript 类库
- Prototype.OpenbizAjax 客户端使用Prototype 库来实现类的继承和Ajax通信。
- jQuery. jQuery 在OpenbizCubi 中的高级UI控件中被大量使用。