1. 什么是Ofbiz
Ofbiz(Open for business)是一个开源的,基于J2EE和XML规范的,用于构建大型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架(Framework)。
Ofbiz几乎实现了所有的J2EE核心设计模式,各个模块之间的耦合比较松散,用户能够比较容易的根据自己的需要进行拆卸。
Ofbiz内置了许多其它开源项目,如JBoss,PostgreSQL,MySQL,Apache,Jetty,JOTM,Jpublish,BeanShell,Ant,BSF,Log4J,等,提供了相对成本比较低的解决方案。同时,用户也可以比容易的更换成其他组件,如将Jboss&&Tomcat换成Bea Weblogic或者IBM Websphere。
2. Ofbiz的好处
l 缩短开发周期,降低成本
据称,很多基于J2EE的失败实践,都可以归结于拙劣的设计。J2EE规范并不复杂,但是如何遵照J2EE规范,根据自己的业务需求,做一个合适的、高效的、可扩展的设计,是需要实际经验和智慧的。国外的大中型系统基于J2EE的早就很多了,国内近几年也多了起来,但是优秀的设计人员不是很多。
Ofbiz的价值在于它的架构非常好,不仅用到了几乎所有的J2EE核心设计模式(Sun公司推荐的),而且还实现了工作流、业务规则引擎,以处理灵活的与变更。这样,就避免了缺少优秀设计人员所造成的拙劣设计。
基于Ofbiz开发,无疑会缩短开发周期,好的设计以及工作流和业务规则引擎的引入,也最大程度的降低了系统的维护成本。
l 用很少的 Code 完成复杂的处理
这是Ofbiz 宣称的优点之一。如果把Ofbiz消化了,则基于Ofbiz开发一个CRM和ERP系统会大大缩短开发周期,由于Ofbiz优良的设计,维护的成本应该比较小。
Ofbiz 已经完成了大部分业务类软件系统都需要的部件,像用户认证、工作流、业务规则处理等,很多业务需求都可以通过写XML配置文件,以及很少的java代码来完成。代码量不大,但知道怎么写会比较费时。弄懂Ofbiz以后,写实现代码通常会比较简单,只需要按照它的开发机制度就是了。
l 扩展性和移植性好
OFBIZ所提供的系统框架,是一个纯Java的应用程序。框架提供的接口十分的完备,例如核心部件实体引擎,早期版本就有,已经十分的成熟。通过实体引擎,用户不用直接操纵数据库,建立库表、查询、视图、触发器等都可以通过写XML配置文件来完成。也有人提出,实体引擎不能够处理复杂的SQL查询,实际上,一方面这种复杂的SQL查询很少遇到,另一方面实体引擎也同样允许你用SQL代码来操纵这种复杂的查询。
OFBIZ开发者同时维护和Weblogic,Tomcat,Jboss,Resin,Orion等16个厂商的Web和App应用服务器的兼容版本.
OFBIZ开发者同时维护和Oracle,MySql,Sybase,PostgreSQL,Hsql等数据库产品的兼容支持,包括编译、打包、部署到这些数据库产品或应用服务器产品的运行环境下。
OFBIZ开发者同时在Unix和Windows两大操作系统上进行开发和测试,而且具备Java应用系统的所有跨平台的特点。
有了这些,对于大型企业级应用系统的具体、特定实现来说,你有信心实现所谓的“一次开发,到处运行”。
l 没有版权问题
免费的,可以用于商业目的,可以分发。
3. Ofbiz的MVC 模式实现
Ofbiz最大的价值,也许就是它不仅仅是一个技术框架,更是一个实现企业应用得很好的业务框架。它的MVC模式不仅仅是Web层,而是贯穿于业务层和数据层,每一层都有出色的控制器。
数据层的控制器 (Entity Engine)
实体引擎是Ofbiz最有价值、最核心的、也是最稳定的一个数据层控制器,通过它基本不用编码或很少编码就可以访问数据层。Ofbiz提供了用XML些配置文件的方法来操纵数据。
实体引擎的功能类似于CICS、实体EJB、以及其他O-R Mapper。但是,Ofbiz的实体引擎不仅强大、而且灵活,程序员不需要JDBC知识,不用写SQL代码。基本上,实体引擎的封装能够解决绝大部分的数据库操作,同时,也提供了给你写SQL代码,实现复杂SQL查询的空间。
实体引擎采用了不少核心J2EE设计模式,如值对象、代表、助手等模式,用户的API接口比较友好。
逻辑层的控制器 (Service Engine)
服务引擎是Ofbiz的另一个核心组件。Ofbiz只有这两个核心组件。实体引擎代表业务数据,而服务引擎代表了业务逻辑。
引入服务引擎的另一个价值是,它使得Ofbiz业务框架不限于Web应用。非Web的客户端包括java 应用、EJB、甚至SOAP都可以直接调用,这样,框架的可扩展性非常好。
服务引擎的服务可以分为同步、异步(关心还是忽略结果),支持JMS。具体实现方式可以是一个java 静态方法、工作流、Bean Shell脚本等。如下图:
Web层控制器 (Control Servlet, JPublish, etc)
Web层控制器的核心是Control Servlet。和Struts一样,Web层的流控制器的配置文件也是一个XML文件。