日期:2011-10-29  浏览次数:20459 次

引言

元数据(Metadata)编程思想源于Java这种高级语言,简单的说就是将业务逻辑与实现代码进行分离,仅用XML这类的描述性语言描述业务之间的映射关系,不需要写实现代码即完成编程。 

 

源于Java的元数据编程特性

原数据是软件架构方面的先进技术之一,让你可以编写更少的代码实现更多的事情,将业务逻辑的重用性发挥到了极致。也许听起来有些抽象,让我们来看一个实际的例子来帮你理解我主张的元数据编程理念。

Openbiz架构让 PHP的元数据编程变为可能

对于脚本级的PHP语言,现在已经成为web开发的主流语言之一。但由于他的出身是一个面向过程的编程语言(我说的是php3,有铁锹那年的事儿了),并不像Python或者Ruby这样的语言,上来就是为了对象而生的极致对象化语言。

基于这个简单的背景,也许还有PHP本身开源免费的原因,我们看到针对php语言的高级扩展相对于.Net 、Java、Objective C这样的商业化语言总是滞后一步。当PHP5发布时高喊"哥们儿 如今已经面向对象了!" Java,.Net和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="Text"/>

       <BizFieldName="price" Column="price" Type="Number"/>

       <BizFieldName="timestamp" Column="timestamp" Type="DateTime"/>

    </BizFieldList>

</BizDataObj>

太棒了!这让我看到了两种未来的可能性,如果编程的主体工作是基于一种描述性的XML语言完成的,那么以后极有可能出现完全所见即所式的编程方式。

另一种极致可能是下文提到的