Openbiz 实现 PHP的元数据编程
e =
BizSystem::getObject("package.do.DataObjName") ->getActiveRecord() ->fieldName;
在元数据中通过Openbiz的SimpleExpression的语法范例 <Element ... DefaultValue="{@package.do.DataObjName[fieldName].Value}" /> 不仅描述数据映射,基于Openbiz元数据描述业务逻辑 如果你已经对这种元数据编程方式有兴趣了,请继续往下看。 出了数据对象与数据表之间的关联映射可以被元数据化,还有什么可以元数据化? MVC的三层结构,UI也可以元数据化,VIew和Form这些UI级元素同样可以通过XML语言来描述装载与触发关系,例如 这个View应该装载哪几个Form? 这个编辑Form上的文本控件应该绑定到哪个数据对象的哪个字段上? 当按下这个按钮的时候,应当触发哪个类的哪个方法? 我们想象增删读改(CRUD)这些常用逻辑框架底层能实现,如果我的需求是当客户下完订单后,自动发邮件通知我,并且发短信通知配货部门。这样的相对复杂业务逻辑,如何元数据化实现? 数据对象触发器 和 可配置的插入式服务 这个邮件和短信的触发肯定不应该在UI层实现,因为我们要考虑不管订单从何处被生成,都应触发发送邮件这个逻辑。所以这个业务逻辑应该被耦合在数据对象上,即只要有订单被生成就应当触发该逻辑。
而发邮件和发短信些种常见的可重用性逻辑,可以被定义为pluginService,例如在发邮件的Service中,收件人,标题,内容应当是API的参数,而发邮件的帐户,SMTP服务器信息相对于业务整个系统来说通常变化不大,应作为元数据接口,而如何与服务器链接来发送邮件则是具体被重用的对象逻辑了。这种设计的精妙之处我们将在下一篇文章中具体给大家分析。 这样实现刚才说的逻辑,我只需要创建一个 OrderDO_Trigger.xml的元数据文件 <PluginServiceName="OrderDO_Trigger" Description="" Package="" Class="doTriggerService" BizObjectName="collab.order.do.OrderDO"> <DOTriggerTriggerType="INSERT" > <TriggerConditionExpression="" ExtraSearchRule="" /> <TriggerActions> <TriggerActionAction="CallService" Immediate="Y" DelayMinutes="" RepeatMinutes=""> <ActionArgumentName="Service" Value="service.lib.userEmailService" /> <ActionArgumentName="Method" Value="sendEmail" /> <ActionArgumentName="RecipientEmail" Value="{@profile:Email}" /> <ActionArgumentName="EmailTemplate" Value="OrderConfirmEmail" /> </TriggerAction> </TriggerActions> </DOTrigger> </PluginService> 当"INSERT" 事件发生的时候,调用发邮件服务, |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |