引言
元数据(Metadata)编程思想源于Java这种高级语言,简单的说就是将业务逻辑与实现代码进行分离,仅用XML这类的描述性语言描述业务之间的映射关系,不需要写实现代码即完成编程。
源于Java的元数据编程特性
原数据是软件架构方面的先进技术之一,让你可以编写更少的代码实现更多的事情,将业务逻辑的重用性发挥到了极致。也许听起来有些抽象,让我们来看一个实际的例子来帮你理解我主张的元数据编程理念。
Openbiz架构让 PHP的元数据编程变为可能
对于脚本级的PHP语言,现在已经成为web开发的主流语言之一。但由于他的出身是一个面向过程的编程语言(我说的是php3,有铁锹那年的事儿了),并不像Python或者Ruby这样的语言,上来就是为了对象而生的极致对象化语言。
基于这个简单的背景,也许还有PHP本身开源免费的原因,我们看到针对php语言的高级扩展相对于 、Java、Objective C这样的商业化语言总是滞后一步。当PHP5发布时高喊"哥们儿 如今已经面向对象了!" Java, 和Cocoa问他"你有元数据编程概念么? 你有UI级别的可重用控件么?Zend怎么还没给你穿上衣服?回去玩儿铁锹吧"
Zend 框架的发展路线始终热衷于底层逻辑代码重用,比如zend_cache, zend_mail, zend_gdata , zend_table 确实实现了大量的底层逻辑的重用,解决了很多微妙复杂的问题。
这里我们积极认可Zend作出的贡献,不过"大哥您到多往前迈一步啊!",不!咱们大哥就喜欢干粗活,不喜欢搞文艺。
最后特别幽默,经过Zend不懈的努力,大哥终于把一件复杂的事情(PHP)抽象为另一件复杂的事情了(Zend框架)。你数数zend的API接口并不比php本身的extension简单多少。
在此不得不提到 伊利诺伊大学毕业的硕士高才生,曾任摩托罗拉的技术主管,美籍华人Rocky Swen,(本人一直是他技术思想的追随者),早在2003年,php4那个年代,他提出了让PHP基于元数据,不用写代码即实现编程这一概念,并有了Openbiz框架的雏形,经过了9年的完善到了今天。
这个理念当时就让我眼前一亮,你看看Zend, CodeIgniter,CakePHP 无一例外属于继承式框架 相当于一组可重用的代码库,Openbiz框架特别之处在于这是一个解释型框架,相当于"编译器"的角色。 当其它开发环境和框架致力于让开发人员少写代码的时候,Rocky兄 提出,别让他们写代码了直接用简单XML语言来描述映射关系即完成编程。
让我们来比较一下这几段程序
以订单管理的数据对象为例
PHP传统的数据对象写法
Class OrderDO
{
protected $m_id;
protected $m_client;
protected $m_product;
protected $m_price;
protected $m_timestamp;
public function create(){ … }
public function delete(){ … }
public function update(){ … }
public function search(){ … }
public function list(){ … }
}
PHP基于Openbiz的元数据写法
<?xmlversion="1.0" standalone="no"?>
<BizDataObjName="OrderDO" Class="BizDataObj" DBName="Default" Table="order" IdGeneration="Identity" CacheLifeTime="7200" >
<BizFieldList>
<BizFieldName="Id" Column="id" Type=" Number "/>
<BizFieldName="client" Column="client" Type="Text"/>
<BizFieldName="product" Column="product" Type=