Openbiz 实现 PHP的元数据编程
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |