快速业务通道

Openbiz 实现 PHP的元数据编程

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
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语言完成的,那么以后极有可能出现完全所见即所式的编程方式。

另一种极致可能是下文提到的对象工厂概念,自动化编程。

对象工厂概念,一个会写程序的程序!

每次提到这个概念都让我激动不已,仿佛我们距离智能化编程只有咫尺之遥。这个理念据我所知最先提出的是.Net的自省(这个汉语翻译很诡异)这一概念,即由主程序动态创建出另一个独立的子程序,动态编译,然后按需装载及销毁(跟变形金刚似的),当时看的我也十分激动,此后这个概念基本上就再也没人提了。

直到后来我阅读分析过了Openbiz的底层源代码惊人地发现了基于PHP实现的对象工厂这一理念。剖析一下思路,以数据对象为例:

基于XML的元数据文件被视为发给"工厂"的装配单,上面描述了应具体如何"组装"这个对象,以及这个对象与地层数据库的映射关系,与同层级的其它对象的映射关系(例如一对多的ORM)

 

对象工厂接到创建这样对象的生产指令后,按描述创建并组装所需对象,并以串行化的方式将对象体和状态缓存在系统内,为再次触发调用,而优化性能。直到元数据配置文件改变之前,对象只需要动态生产一次,即无限次使用。

基于这种编程逻辑,我们解决一个常见的修改和扩展问题。

例如:客户经常会再项目验收时提出底地层数据字段的修改,"您看联系人管理这个模块,能不能再增加个 生日 和 喜好 字段,要不然这尾款恐怕..."。 

怎么办?

改吧。 增删读写(CRUD),列取(List),搜索(Search)一个不能少全都要改。

谁改?

肯定你改啊,因为是你写程序。

Openbiz元数据就不一样了,现在我只修改一个数据描述文件,然后是对象工厂会检测到元数据配置文件发生改变,然后他来自动重新编写对象和所有与其相关的映射调用(ORM)。 

当你面对的是一个业务偶合性特别复杂的系统时,你会发现这些上层对象"你中有我,我中有你"堆叠式调用复杂至极(恶心至极)。比如在文档修改记录的视图中也调用了联系人的这几个字段等,你确定能一个不差的修改遍与这个数据结构的每一个角落么? 

此非人力所能为也!但对象工厂可以,因为是按需生产创建。

PHP语言自身对对象的处理还存在这样一个缺陷,对象的生命期是不能跨视图的,当一个页面请求被执行完毕,与其相关所有资源就都被自动销毁回收了。特别是数据对象这种通常会带有数据库链接和游标状态的对象。

Openbiz的会话管理机制配合对像工厂的实现可持久的对象状态。

对象工厂会在交付对象前调用抽象类的MetaObject::setSessionData()接口来自动还原对象状态。

这样在编写程序的时候,我们在整个用户会话期内可以跨视图去调用用户曾经输入过的数据。例如将用户曾经输入过的信息作为默认值显示在当前这个视图上。

在php中的调用语法范例:

$defaultValu

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号