ofbiz的架构设计

1.数据层
在数据层中,OFBIZ使用ENTITY ENGINE作为其工具,并且能够满足99%与数据库交互的功能.有时在某些地方Entity Engine并不是有效的.这时就需要编写自定义的JDBC代码来与数据库交互.
2.逻辑层
OFBIZ 使用Service Engine作为调用逻辑的工具.几乎所有的业务逻辑都被实现成服务,以便提高重用和使基于组件的开发更便利.我们可以同步或者异步调用我们的逻辑,甚至 将它们作为一个计划表来按时间调用.当我们调用一个服务时,我们不需要知道该服务的位置或者如何实现.这也就意味着我们可以使用多种语言来实现该服务.例 如Java,BeanShell以及任何BSF编译脚本语言(python,jacl,javascript等等)
我们会一直通过Service Engine调用远端逻辑,可以通过不同机制包括HTTP,SOAP,JMS或者其他的机制,也可以通过创建一个简单的适配器来作为调用远端服务的调用机制.
很明显,我们大多数时间需要在一个事务里包装一些服务,以便服务能够全部成功或者全部失败.
3.显示层
经常分离输入处理逻辑,浏览数据预备层以及浏览显示模板.这样不仅能够在WEB程序中重用逻辑,而且也独立于胖客户端程序.
1)数据处理逻辑
数 据处理逻辑在controller.xml文件应该与请求(request)联系,而不是与视图联系.数据处理逻辑总的来讲被实现为一个服务,并且通过服 务事件句柄调用,服务事件句柄会自动从请求参数(request parameters)或者属性中抽取数据,并将它从字符串类型转化成在服务定义文件所定义的对象类型.
有一些情况是数据处理逻辑不能实现为服务 的.存在多种与请求关联的逻辑的其他类型事件句柄,这些句柄给你更多的请求上下文,但象服务那样不是环境未知的. 其中一个例子是接收上传数据.另一个好的例子是作一些特殊的前置处理和在传给服务处理之前的参数验证.注意到你可以从这些自定义事件中调用服务.
2)浏览数据预备逻辑
浏览数据预备逻辑应该与视图模板联系起来.这个应该通过JPublish在页面定义XML文件定义动作来实现.当一个页面被分割为多个模板,数据预备动作应该只和它为之准备数据的独立的小模板联系.这样使得移除模板和内容切片更容易,并且能够在很多页面中重用它们.
浏 览数据预备逻辑应该使用动态脚本语言,例如JAVASCRIPT,BeanShell,jython或者Jacl来实现.这样就更容易修改在表面修改用户 接口.一般数据接收应该实现成服务,这样可以从这些动态动作脚本调用.这样在多个页面和其他类型的用户接口里共享和重用功能模块.
注意到当使用 JSP作为视图模板时,你不能使用JPublish,所以动作特效不能提供.我们对JSP的建议时在每个页面的上端使用单个 scriptlet准备数据.在这种情况下,尝试调用工作者服务(worker service)或者工作者的java方法来 尽量可能多地将逻辑排除在页面之外.
3)视图显示模板
FreeMarker是我 们为HTML和其他文本生成推荐的最佳模板引擎.它象Velocity,但更灵活并且更好地与OFBIZ 核心框架工具搭配.除了直接使用FreeMarker的模板以外,我们强烈推荐使用JPublish,这样动作可以与页面和模板联系起来,页面可以被普通 模板渲染.
视图显示模板应该尽可能保持简单;通用内容例如headers,footers,sidebars等等应该实时通过渲染模式添加.被用 来渲染每个页面的模板文件在JPublish定义XML文件中定义.当你希望像视图一样显示报告,我们推荐使用JASPERREPORTS或者 Datavision,在 controller.xml文件里通过视图映射(view-map)装上这些报告.如果你希望使用其他文本生成工具例如Velocity或者XSLT, 我们推荐你通过JPublish做这项工作,特别是你想它能够被渲染或者拥有动作来为这些模板提供数据.
如果你使用能够经常重复的UI模式,例如 forms,请求数据显示,TAB或者menu bars,expanding tree views.我们现在推荐使用一个XML文件来描述该UI模式,然后使用XSLT转化成FreeMarker 模板,该模板可以合并最终模板和上下文的数据.注意到所推荐的会经常改变并重新定义,这也就说明了不同的方法存在多种解决方案.
当使用 FreeMarker是不可能或者不切实际时,我们推荐使用其他动态模板语言例如Velocity,如果这也是不切实际,那么我们则推荐JSP.但是当我 们是使用JSP时我们不能利用动作或者渲染模板的优点,因为你不能通过JPublish执行它.即使你不能使用渲染模式,你可以与OFbiz Region框架一起使用组合视图模式.Regions在Regions.xml文件里定义.注意到这些Regions并不和Jpublish组合视图那 样好用,并且它们不支持动作.
但是Regions框架确实提供了很多灵活性,并且在很多情况下非常有用.

你可能感兴趣的:(设计模式,xml,freemarker,jsp,velocity)