Openbiz --- 基于元数据的面向企业应用而设计的极致面向对象的开源PHP框架

本文主要是介绍Openbiz --- 基于元数据的面向企业应用而设计的极致面向对象的开源PHP框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 系统概述 
  • 技术架构 
  • 元数据编程
  • 简单表达式 
  • 数据抽象层 
  • 图形展示层 
  • 系统扩展服务 
  • 快速上手

框架介绍

  Openbiz Framework是为搭建企业应用而设计的PHP的基于面向对象的快速开发框架。它可以帮助专业软件开发人员和技术咨询专家来构建用于网络上的企业级应用。
由于企业级应用的高复杂性,系统开发通常会需要巨大投资和冗长的时间去进行工程计划,系统设计,原型设计,组件编码,功能测试,产品部署以及维护。
Openbiz Framework的设计目标是节省构建复杂应用系统的开发投入和缩短开发时间。借助于Openbiz的帮助,应用程序的开发将基于完善的MVC架构建立,以
Metadata驱动为核心描述业务逻辑,支持多种ORM逻辑,并且有Openbiz Appbuilder作为图形化集成开发环境的快速开发平台。

优势特性

  Metadata 驱动

    Openbiz Framework是以元数据(Metadata)驱动的框架。这意味着Openbiz对象(Objects)的创立是基于Metadata的描述文件。构建一个系统对象意味着设计和编写XML格式的Metadata文件。因此,基于Openbiz的应用软件包是完全可客户定制化的,而且是极其容易开发和维护的。

  MVC架构

    Openbiz Framework内部集成了MVC(模型-视图-控制器)的设计模式。这使得基于Openbiz的应用非常容易来开发和管理,因为表述层的程序与商业数据和逻辑清楚地分离开来。

  ORM(对象关系映射)

    Openbiz Framework的内核实现了高级ORM对象关系映射功能。Openbiz以BizDataObj数据对象来表述数据库表格和它们之间的逻辑关系。Openbiz支持的映射包括一对多,多对一,一对一、多对多和自我相关的对象逻辑关系,并且支持与标准结构化查询语言(SQL)相似的查询语言。

  可扩展性系统服务

    Openbiz Framework允许开发人员通过实现插入式服务的方式编写自己的特殊逻辑。Openbiz服务对象同样是基于元数据驱动的对象。
    Openbiz Framework自身已经包含了很多功能实用的高级框架。例如:缓存管理服务,访问控制服务、电子邮件服务 和 数据查询服务等。

  开放的许可协议

    Openbiz Framework 底层基于自由开放的BSD License 发布。您可以放心大胆的基于Openbiz Framework来构建您的商业应用软件,而无需担心版权问题。

  成熟稳定且完善

    Openbiz Framework 创始于2003年,历经十余年发展完善,基于Openbiz框架的解决方案曾服务于三星电子、中国移动、工商银行、福田汽车众多国际品牌。可以  轻松应对各种客户的制定需求的。

投资回报

  更低成本

    由于Openbiz的免费许可证和短时的开发过程,你将花极少的费用在购买软件和雇佣咨询公司上,而且得到更好的产品。

  迅速部署

    基于Openbiz的应用是完全可重配置的,这样它能够迅速因需求而变化。你将可以轻松满足用户不断变化的应用需求。

  低维护费用

    管理Openbiz的Metadata比起管理混杂的程序源代码要简单得多。

用户体验

  基于Cubi实现了一套淘宝的会员信息管理和KPI统计分析(目前已发布在淘宝服务市场),在过程中感觉整个系统的开发我更多时间花在系统的需求整理和规则,其它如的新增、修改、删除等功能Cubi都已经帮我实现好了,并且模块之间都能够无缝对接无缝集成,相信在Cubi的不断完善下软件开发将不只是开发者的专属,开发软件将变的更轻松。
                                      -冯圣龙,中国

  我们正在想办法来代替公司以有的过时的用Visual Basic编写的程序。Openbiz是我们发现的最好的开发框架。
                                      -Andrew,美国

  我们花了两个月来研究不同的应用框架,Openbiz是唯一的系统,它能创建Web应用而不需要了解PHP编程。
                                      -Nik,保加利亚

  我高兴地给出A+,因为我对Openbiz的问题得到了迅速而且完美的解答。Openbiz Framework的确厉害!
                                      -Douglas,法国

 

-------------------------------------------------------------------------------------------------------------------------------

先进的技术架构是构建系统的基础

框架介绍

Openbiz是一个多层结构体系。Openbiz应用程序被分为三层设计,表示层,业务逻辑层和数据抽象层,在Openbiz中:

  • 表示层是由Openbiz视图和表单对象实现的。Openbiz还有额外的JavaScript库负责通过Ajax的方式与服务器后端的表示层对象通信。
  • 商业逻辑层是由Openbiz数据对象 和 Openbiz 服务对象 实现的。
  • 数据抽象层由Zend_DB来处理多类型关系数据库数据的操作。

模块、视图与控制器 (MVC)

Openbiz的一个关键性特性就是它是一个基于模块-视图-控制器(MVC)设计模式的框架。这一特点使得基于Openbiz开发的应用程序更加便于管理。
因为表现层(View)是与应用程序的数据和逻辑(Model)清晰的分离开的。所有用户与应用程序的交互全部由前端控制器来处理。

比较Openbiz MVC和市场上主流的MVC框架例如JSF和Strusts等,Openbiz框架更加接近JSF,因为他们同样是基于对象的结构。
Openbiz的视图层包括了视图对象,表单对象和表单控件等组件,这些对象在处理请求时都是可被访问的。

Openbiz 核心对象

任何应用都可以由两部分组成-后端和前端。通常的主要业务逻辑运行在后端, 而用户界面在前端。在Openbiz中,后端主要为 “数据对象”或“服务对象”。前端主要有“表单对象”和“视图对象。” 数据对象(又名“DO”)是一个数据单元。Openbiz数据对象将数据库中的表和关系映射到系统对象中。 它在对象中封装了(创建,读取,更新和删除)等操作,并提供了高级搜索接口。

一个数据对象包含了一组字段。在典型的用法中,一个数据对象映射到数据库中的表,并且每一个字段映射到数据表中的列或者SQL表达式。 服务对象 服务对象(又名“Service”)是一个Openbiz的系统服务单元,其包含业务逻辑实现的一组函数(方法)。典型的Openbiz服务对象的范例是“用户身份验证服务” 和 “电子邮件服务” 表单对象(又名“Form”)是用户界面区块的单元,它包含了一组相关的表单控件,他可以是一个标准的HTML表单,一个带有工具栏和导航条的HTML表格,一个图片列表等。一个表单对象包含了一组表单控件,它即可以是简单的也可以是高级的HTML控件。典型的使用方法是:一个表单对象映射到一个数据对象上,并把每一个表单对象上的表单控件分别映射到数据对象的字段上。 视图对象(又名“View”)实际上是网页的页面别称。试图对象是表单对象的容器。你可以把视图对象(网页)想象为是地板,而表单对象就是依附在上面的瓷砖。

Openbiz 代码结构

Openbiz 核心类库和代码结构如下

openbiz_root/
--- bin/(openbiz 核心PHP源代码)
------ data/(数据层类库)
---------- private/(数据曾私有类库)
------ easy/(表现层类库)
---------- element/(HTML表单控件类库)
------ service/(openbiz 核心服务类库)
------ util/(工具类库)
--- message/(openbiz字符串定义文件)
--- metadata/(openbiz元数据文件夹)
------ service/(openbiz服务包)
--- others/(第三方类库)
------ Smarty/(smarty包)
------ zend/(Zend 框架)

第三方类库

Openbiz 尝试在系统中集成市场上最好的第三方类库,在Openbiz中大量使用的关键类库包括:

  • Zend 框架. Openbiz 在如下应用中使用了 Zend 框架
  • 数据库交互
  • 多语言支持
  • 数据有效性校验
  • 电子邮件服务
  • 高级缓存管理
  • JSON编码和解码
  • PHP 模板
  • Smarty 模版系统.
  • Smarty 是系统的主要模板引擎,应用于Openbiz表单对象和视图对象。
  • Javascript 类库
  • Prototype.
  • Openbiz Ajax 客户端使用Prototype 库来实现类的继承和Ajax通信。
  • jQuery.
  • jQuery 在 Openbiz Cubi 中的高级UI控件中被大量使用
-------------------------------------------------------------------------------------------------------------------------------

为何要面向元数据

Openbiz框架的设计目标是使设计,开发和维护网络应用程序变的快捷和方便。Openbiz架构的主要创新是其基于元数据的设计。
这意味着Openbiz对象是基于元数据文件中的描述的而创建的。对于Openbiz来说在大多数时间构建一个应用程序就相当于设置和开发他的元数据文件。
由于XML语言的自我解释这一特性,使得Openbiz的应用程序十分易于维护,与此同时Openbiz是如同XML语言一样也一个具有丰富可扩展的框架。

面向元数据编程

Openbiz的核心理念在于他的基于元数据驱动的机制。什么是元数据呢?从字面上来解释,元数据是一个描述数据的数据组件。 它是“关于数据的数据”。在Openbiz中元数据文件扮演着Openbiz类的配置文件。所有Openbiz核心类都是一般类。 它们由不同的元数据重新赋予了不通的意义,它们分别代表着不同的事务与关系。 例如:当StudentDO.xml关联到BizDataObj类时,这个BizDataObj实例就是一个“学生”对象,但当SchoolDO.xml 关联到BizDataObj类时,那么这个BizDataObj实例就成为了一个“学校”对象。

正因为Openbiz的类是被元数据所描述的,编写元数据文件就如同实现了一个类, 因此,应用程序的开发工作大多数时候就转变成了编写元数据文件的工作,替代了传统意义上的编程。通过元数据的方式来描述应用程序将会使其具有更清晰的逻辑和设计。

元数据可以实现什么元数据不可以实现什么
描述对象的属性逻辑与功能。这部分应当在真正的程序代码中得以实现。“Class”属性可以使一个元数据绑定到任意一个自定义的对象上,从而实现特殊的逻辑与功能。
描述对象间的关系
描述表现层对象的渲染(显示)方法页面或者控件的布局。Openbiz的“TemplateFile”属性可以给一个页面或表单指定自定义的位web模板。
描述数据的有效性校验方法
描述用户在页面上的交互行为

元数据的“包”管理

优秀应用程序设计通常是模块化的。Openbiz推荐程序开发人员在 cubi/modules/ 这样的目录结构中创建自己的元数据。这也正是Openbiz Cubi遵循的标准。
Openbiz源数据文件可以被组织为模块名和子目录名,这就像在Java中实现的包的概念。
例如:PackageX.PackageY.metaA 这个命名和在 modules/PackageX/PackageY 目录中的metaA.xml是同一个概念。

元数据与控制反转(IoC)的关系

了解 Java Spring 框架的读者应该对“控制反转”(Invese of Control,即IoC)的概念不陌生。
IoC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,
但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。
Openbiz框架可以被看作 IoC 的一个实现。框架本身是 IoC 容器,而其元数据则是对象的配置文件。
以之前提到的范例,UserNewForm.xml 描述创建“用户”Form 对象的方式。其中的BizDataObj=“system.do.UserDO” 属性指定了该 Form 对象所需要的数据对象。 Openbiz框架在运行时通过对象工厂将 UserNewForm 和 UserDO 的对象实例初始化,并把 UserDO 对象实例“注入”给 UserDO 对象。
Openbiz框架实现了 IoC 容器之外的更多的功能。Openbiz将商业应用中最常用的类抽象出来作为框架的核心对象。

元数据范例

让我们来看两个简单的元数据范例。UserDO.xml 代表了一个用户信息对象,
UserNewForm.xml代表了一个创建该用户信息对象的表单,两段XML元数据的含义是可以实现自我解释的。

-------------------------------------------------------------------------------------------------------------------------------

元数据简单表达式(Simple Expression)

Openbiz的元数据不仅可以描述数据间的关系映射,而且能描述数据的有效性校验方法和用户在页面上的交互行为。
比如当用户在用户注册表单上点击“提交”按钮时,服务器端需要验证用户输入的是有效的邮件地址。
这样的逻辑通常是将用户输入送给邮件地址验证的函数,该函数会返回true或false。那么这种逻辑如何用元数据表达呢?

表达式标签

系统目前支持三种表达式标签

  • {expr}标签对.
  • Openbiz将执行php的eval方式来解析{}之间的expr表达式字符串
  • {fx}expr{/fx}标签对.
  • 这是一个详细版的{}表达式实现。Openbiz 同样将执行php的eval方式来解析{fx}和{/fx}之间的expr表达式字符串。例如{fx}10-1{/fx}将返回结果”9”。
  • {tx}expr{/tx}标签对.
  • 这对标签告诉Openbiz只需要返回字符串本身,而不对其进行处理计算,例如:{tx}10-1{/tx} 将返回字符串 “10-1”。
表达式的语法结构
  • 数据类型
  • 简单表达式定义了如下几组数据类型:
  • 布尔类型: true 或 false
  • 整数数字。
  • 浮点数。
  • 字符串: 单引号和双引号括起来的字符; ” 将被转义为 \”, '将被转义为\', \将被转义为\\.
  • 空: null
  • 操作符
  • 数学: +, -, *, /, % 和 mod, -(负数)
  • 逻辑: and, &&, or, ||, not, !
  • 关系: ==, !=, <, >, ⇐, >=.
  • 条件: A ? B : C.根据 A 的返回结构执行B或C语句.
  • 变量
  • 简单表达式允许开发人员调用Openbiz元数据对象中的变量
调用元数据对象中变量的语法描述适用范例
@object_name:property_name获取指定对象的指定属性@system.do.UserDO:m_Name
@object_name:*[child_name].property_name获取指定对象的子元素的指定属性@system.do.UserDO:Field[username].Value
@:property_name获取当前对象的指定属性@:m_Name
@:*[child_name].property_name获取当前对象的子元素的指定属性@:Field[username].Value
[field_name]从当前数据对象或表单对象中获取指定字段的
数值
In UserDO, [Id] means getting the “Id” field value of UserDO.
@profile:property_name获取用户档案中的制定属性ProfileService提供 @profile:email
@service_alias:method(arg1, arg2 …)用户档案是由调用注册的插件服务器方法的
返回值
@query:FetchField(system.do.UserDO,[email]='abc@gmail.com')
当前注册插件服务范例:

@validation – 数据有效性校验服务
@query – 数据查询服务
如果要注册一个服务, 可以在/cubi/bin/app_init.php 的 $g_ServiceAlias 全局变量中添加该服务名字的注册。
扩展对象获取属性
开发人员可以通过修改或重载对象的GetProperty()方法来添加更多的属性支持。

public function getProperty($propertyName)


GetProperty() 函数的输入参数既可以是”property_name” 也可以是 “*[child_name]” 或者一些其它的被用户自定义代码支持的参数。 调用全局变量简单表达式语言业允许开发人员来调用任何PHP所支持的全局变量,关于PHP全局变量请阅读

http://us2.php.net/manual/en/reserved.variables.php 了解详情

函数

开发人员可以在简单表达式中调用任意PHP函数,如果文件中已经包含了函数的定义,那么即便是用户自定义函数也可以被调用。
例如:如果元数据A是基于用户自定义类的基础上创建的,类的代码文件是A.php,且该文件包含了A_help.inc,
在这种情况下您就可以安全的调用在A_help.inc文件中定义的自定义函数。

范例

给数据对象设定查询规则(SearchRule)

<BizDataObjName="FutureActivityDO"SearchRule="[start]>{date('Y-m-d')}'" ...>

给数据对象的字段自动赋值为当前用户的ID

<BizFieldName="create_by"Column="create_by"Type="Number"ValueOnCreate="{@profile:Id}"/>

给数据对象的字段的值设为另两个字段值的组合

<BizFieldName="fullname"Value="{[lastname]}, {@:Field[firstname].Value}"/>

给表单对象的控件设置输入验证

<ElementName="fld_email"Class="InputText"FieldName="email"Label="Email"Validator="{@validate:email('[fld_email]')}"/>

-------------------------------------------------------------------------------------------------------------------------------

数据抽象层

Openbiz 数据对象可以通过Zend_DB来连接各种类型的关系型数据库,Zend_DB为Openbiz底层提供了在PDO和本地数据库客户端工具之上的数据抽象层。 开发人员可以使用Openbiz数据对象API来实现大部分的数据库操作,或直接调用Zend_DB API来完成高级功能。 如果需要连接不同类型的数据库,用户只需要在应用程序根目录的application.xml中指定数据库连接即可。 Openbiz 数据对象将调用正确的数据库驱动程序去连接数据库服务器。Openbiz当前支持的数据库类型有MySQL, MSSQL, Oracle, PostgreSQL, SQLlite 等。 每个Openbiz数据对象可以有它自己的数据库引用。此功能可以帮助您实现在一个应用程序中同时连接多个数据库。甚至在同一张网页上也可以连接多个数据源。

对象关系映射

Openbiz 实现了必要的“对象关系映射”功能,允许将数据库中的数据和关系映射的数据对象上。Openbiz的数据对象的核心类称为“BizDataObj”。该类的元数据定义了数据表和对象的映射。它能够通过其元数据来生成相应的SQL,实现了查询、保存、删除、读取对象的功能。 以下列表是Openbiz对象关系映射所实现的功能。

灵活的映射
  • 支持数据表与对象映射,如:单数据表和一个对象,多数据表和一个对象的映射方式。
  • 支持关系映射,多对一,一对多,多对多,一对一、自我相关引用模式。
查询工具
  • 支持类 SQL 查询语言
  • 支持 SQL 函数和操作符
  • 支持 SQL 统计功能
  • 支持 group by, having 和 order by
元数据工具
  • Openbiz用BizDataObj的元数据(XML)来描述映射关系。
CRUD操作的API
  • Openbiz的BizDataObj类提供了丰富的数据查询、保存、删除、读取的API。

数据对象API

Openbiz数据对象为增删读改(CURD)操作提供了直观的高级API。 为了帮助开发人员避免直接编写复杂的SQL语句,建议使用Openbiz支持的查询语言。 更多详情

数据字段默认值

有时人们希望在创建或更新的时候自动设置某些列的值,例如,当一个记录被创建时, 我们系统设置当前的时间给”create_time”列,同样当这条记录被更新时, 我们也希望设置当前的系统时间给”update_time”列。Openbiz的数据对象的字段元数据表属性将会帮您解决此类问题。 * ValueOnCreate 可以在记录被创建时提供默认值 * ValueOnUpdate 可以在记录被更新时提供默认值

数据对象触发器(DO Trigger)

当数据对象执行创建、更新、删除操作的时候,Openbiz数据对象触发器服务将提供一个“钩子”来触发自定义的行为。 一旦触发器在数据对象的元数据中被定义,它将在数据对象的行为成功完成后被立即执行。 数据对象触发器有两部分组成,触发事件和被触发的行为。这些信息都在触发器服务的元数据文件中被定义。 当用户通过数据对象来创建、更新、删除一条记录时,Openbiz将在同一目录下查找以这个数据对象名为前缀数据对象触发器定义文件, 即 DOName_trigger.xml 。例如EventDO的触发器元数据文件就是在同一个目录下的文件 EventDO_trigger.xml。

数据有效性校验

数据有效性校验可以在数据对象的元数据中被设定。它主要用于检测当数据记录被创建或更新时所输入的数据。 针对数据对象字段的有效性校验包括了

  • 唯一性校验
  • 必要性校验
  • 校验表达式

如果校验失败,数据对象将会抛出一个异常给它的调用者。

-------------------------------------------------------------------------------------------------------------------------------

图形表现层介绍

Openbiz的图形表现层主要分为 视图对象 表单对象 和 表单控件对象。
其主要表现逻辑封装于 Openbiz Cubi 应用平台中,作为框架底层在 Openbiz Framework中负责处理这些对象之间的调用关系,而不负责对其样式和外观进行风格化。
例如在父子表单联动的案例中,Openbiz负责的部分是当父表单触发了 SelectRecord方法后自动刷新与其关联的子表单。但这两个表单具体外观是什么样子是由Smarty模板定义的。在Openbiz Cubi中为开发人员提供了支持全部特性的模板。

视图对象

Openbiz的视图对象相当于整个页面,它负责定义该页面如何装载表单、菜单和其他小部件。 以及适应在各种设备上显示页面。在MVC结构中它与表单对象的实现类文件共同作为控制器(Controller)。

   

表单对象

Openbiz 表单对象是系统的主要数据逻辑部分,它负责数据的展示逻辑,通常每个表单对象都会绑定一个数据对象。
常见的表单对象有 列表、详情、编辑、新建、复制几种类型,表单对象可以被潜入在视图中也可以作为内嵌或弹出窗口(层)来使用。

   

表单控件对象 - Elements

Openbiz 的表单控件对象是用于在表单对象中绑定数据对象字段使用的。通常每个表单控件会映射到该表单对象所绑定的数据对象的某个列上。 不同的表单控件提供了不同的数据展示或输入逻辑,除了标准的Web表单控件(文本框、单选菜单、多选菜单、复选框)外, Openbiz Framework 还提供了高级控件的支持,例如:条码扫瞄控件、智能卡读卡控件、颜色选择控件、富文本编辑控件等。 表单控件通常还可以触发事件,事件的定义与HTML控件事件相似,事件行为可以是触发服务器端的对象自定义方法、在表单之间或者客户端Javascript代码

Openbiz的高级表单控件展示

智能卡读卡器控件

该控件直接支持键盘口的智能卡读卡器设备,可以捕获设备在浏览器窗口防围内传入的任何自负序列,常用于开发智能卡应用系统使用。例如会员卡管理系统。

开关按钮

可以通过直观的开关方式更有好的展示布尔形数据字段

条码扫描枪

该控件可以直接读取键盘口的条码扫描枪,可以捕获设备在浏览器窗口防围内传入的任何自负序列, 常用于开发条码应用系统使用,例如产品库存管理等

表格数据排序

常用于列表表单,可以让用户对表单数据的排序权重进行快捷调整。

颜色选择控件

框架集成了jQuery ColorPicker控件,可以让用户更加直观的进行颜色选择,该特性在Openbiz的商业产品的按类型定义颜色特性中有大量使用。

自动提示文本框

常用于列表表单,可以根据用户已经输入的部分文字自动匹配相关选项

带图标的下拉菜单

比浏览器自带的下拉菜单更加精美的下拉菜单方式,允许开发人员在每个选项上增加图标样式。

进度条控件

常用于列表表单,可以直观的展现某项数据的进度,用于绑定整数型字段

富文本编辑控件

框架友好的集成了CKEditor的富文本编辑器,可以让用户通过直观既得的方式编辑HTML代码或文档。

-------------------------------------------------------------------------------------------------------------------------------

Openbiz系统可扩展服务

Openbiz 允许开发人员通过实现插入式服务的方式编写自己的特殊逻辑。Openbiz服务对象同样是基于元数据驱动的对象。

访问控制服务

该服务可以帮助您实现基于固定角色的简单的用户访问权限控制。适合于简单应用。

数据权限服务

该服务可以为数据可视性分离以及高级数据共享服务生成底层附加SQL查询规则。

系统工具服务

该服务帮您完成一些周边逻辑的常用函数。例如,字节显示转换、获取当前应用短URL等杂项工具

货币服务

通常用于订单结算系统等应用。该服务提供底层货币汇率转换 和 本地化的显示逻辑。

安全过滤服务

该服务可以根据其配置文件来实现网络数据包过滤。可以依赖该服务对敏感和危险信息进行屏蔽。

系统缓存服务

该服务主要用于缓存系统级对象和数据为整体性能优化而设计。开发人员也可以通过调用其API实现应用层数据缓存

用户档案服务

该服务可以通过统一的方式快速创建和访问用户的详细资料。便于用户信息管理

身份审核服务

该服务是用户身份审核的抽象层,用于身份的审核验证环节,负责与用户数据库连接,类似于Unix的PAM将底层验证逻辑与上层应用分离。

系统首选项服务

该服务可以允许您和用户设置或快速访问自定义的系统级或用户级配置参数。

电子邮件服务

该服务封装了与SMTP服务器通讯的底层协议,提供简单友好调用接口给开发人员用户创建集成电子邮件通知特性的应用。

系统日志服务

通过该服务的API借口可以方便的记录触发系统日志,并对日志信息的显示做了有好的多语言化处理

数值列表服务

该服务用于以本地化的方式数组将程序内预定义的数据字典元数据转换为便于程序调用的数组。

创建你自己的扩展服务

服务代码存放在 bin/service 目录下,其元数据描述文件存放在 /metadata/service 目录下。 服务元数据可以指定服务名称,实现的类名如同其它对象的元数据配置一样。服务对象元数据没有一个固定的格式, 因此不同的系统服务可以有各自不同的元数据配置格式。 Openbiz服务通常是有两部分组成:

  • 服务的元数据
  • 服务的实现类

您可以简单的通过复制一个现有服务的元数据文件service_name.xml 和程序文件 service_name.php。再此之上编写您自己的Openbiz服务。

-------------------------------------------------------------------------------------------------------------------------------

轻便灵活的内建描述语言

将Openbiz部署到现有的系统 

快速本地安装指南

Openbiz 允许开发人员通过实现插入式服务的方式编写自己的特殊逻辑。Openbiz服务对象同样是基于元数据驱动的对象。

1、准备环境

根据习用环境要求,来安装设置所需软件

2、获取Cubi

通过完成在线订单的方式获取Cubi的下载地址并注册您的OpenbizID,不必担心此过程免费。您的OpenbizID将用于您日后获取技术支持使用。

3、修改参数

将Cubi源代码包内的文件 解压缩到您的Web文件夹中的openbiz文件夹。 通过您常用的文本编辑器打开 openbiz/sys_init.php 并更具您的实际情况参考备注信息修改参数设置。    (如果您是使用Openbiz创建新的应用通常不需要设置)

4、集成部署

创建一个helloworld.php 文件通过require_once 将刚才的openbiz/sys_init.php 包含进来。在该文件内输入如下内容: echo "Openbiz Framework Version: ".BizSystem::getVersion();

5、测试

打开浏览器,输入http://localhost/sample.php, 如果您可以顺利看到Openbiz框架的版本号显示,证明您已经成功的将Openbiz部署成功。

6、完成!

完成了!开始Openbiz为您带来新开发体验吧。现在您可以根据教程中的范例来开始练习和学习了。

系统环境要求

支持操作系统:
Microsoft Windows 2008,Microsoft Windows 2003,FreeBSD,Linux,Macintosh
支持Web服务器:
Apache Web Server 2.0,Microsoft IIS 5.0,Lighttpd 1.4
支持数据库:
MySQL 5.0 (推荐),Microsoft SQL Server,PostgreSQL
脚本引擎:
PHP 5.3 并启用如下扩展,mod_curl,mod_pdo,mod_pdo-mysql,mod_mcrypt
加密引擎:
IonCube Loader

培训与学习资料

关于推荐的技术学习资料列表,请访问如下链接:

  • Openbiz at Google Code http://openbiz-cubi.googlecode.com/
  • Openbiz 在线产品文档 http://docs.openbiz.cn/
  • 优库视频学习资料 http://u.youku.com/openbiz
  • 土豆视频学习资料 http://www.tudou.com/home/Openbiz
  • Openbiz 新浪博客 http://blog.sina.com.cn/openbiz

这篇关于Openbiz --- 基于元数据的面向企业应用而设计的极致面向对象的开源PHP框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/732127

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X