ofbiz框架以及核心原理介绍
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文件。
原文地址:https://blog.csdn.net/levelo/article/details/54693900
ofbiz框架以及核心原理介绍的更多相关文章
- 高性能消息队列 CKafka 核心原理介绍(上)
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:闫燕飞 1.背景 Ckafka是基础架构部开发的高性能.高可用消息中间件,其主要用于消息传输.网站活动追踪.运营监控.日志聚合.流式 ...
- 开源框架TLog核心原理架构解析
前言 最近在做TLog 1.2.5版本的迭代,许多小伙伴之前也表示说很想参与开源项目的贡献.为了让项目更好更快速的迭代新特性以及本着发扬开源精神互相学习交流,很有幸招募到了很多小伙伴与我一起前行. 为 ...
- 【转】diamond专题(二)– 核心原理介绍
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- 通过模拟Mybatis动态代理生成Mapper代理类,讲解Mybatis核心原理
本文将通过模拟Mybatis动态代理生成Mapper代理类,讲解Mybatis原理 1.平常我们是如何使用Mapper的 先写一个简单的UserMapper,它包含一个全表查询的方法,代码如下 pub ...
- APP自动化框架LazyAndroid使用手册(3)--核心API介绍
作者:黄书力 概述 在前一篇博文中,简要介绍了一款安卓UI自动化测试框架LazyAndroid (http://blog.csdn.net/kaka1121/article/details/53204 ...
- Rookey.Frame v1.0 视频教程之三发布-框架核心思想介绍
本期发布视频: (三)Rookey.Frame v1.0框架核心思想 介绍了Rookey.Frame v1.0框架搭建的核心思想,将框架核心思想理解清楚,对框架运行就会得心应手 官方视频教程: htt ...
- 新书介绍 -- 《Redis核心原理与实践》
大家好,今天给大家介绍一下我的新书 -- <Redis核心原理与实践>. 后端开发的同学应该对Redis都不陌生,Redis由于性能极高.功能强大,已成为业界非常流行的内存数据库. < ...
- 03 Yarn 原理介绍
Yarn 原理介绍 大纲: Hadoop 架构介绍 YARN 产生的背景 YARN 基础架构及原理 Hadoop的1.X架构的介绍 在1.x中的NameNodes只可能有一个,虽然可以通过Se ...
- Spring框架和MVC原理
Spring框架和MVC原理 目录 Spring框架 SpringMVC工作原理 参考资料 回到顶部 Spring框架 Spring当前框架有20个jar包,大致可以分为6大模块: Core Cont ...
随机推荐
- CSS3——PC以及移动端页面适配方法(流体布局)
流体布局:使用百分比来设置元素的宽度,元素的高度按照实际值. 但是流体布局中存在一个边框的问题,元素的边线无法计入百分比. 两种解决办法: 1)width:calc(20% - 4px) 2)widt ...
- celery结合redis 使用
使用 Redis¶ 安装¶ 对 Redis 的支持需要额外的依赖.你可以用 celery[redis] 捆绑 同时安装 Celery 和这些依赖: $ pip install -U celery[re ...
- 开发工具Intellij IDEA:面板介绍
一.面板说明 IDEA面板的全貌如下图 2|0 二.菜单栏 下面会简单介绍下一些常用的部分菜单使用,如有疑问或补充欢迎留言. (1).File文件 1. New:新建一个工程 可以新建project, ...
- asp.net (web)选择文件夹 上传文件
1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...
- Supervised pre-trainning有监督预训练
如我们有一个分类任务,数据库很小,这时还是需要通过预训练来避免深度模型的过拟合问题的,只不过预训练是通过在一个大的数据库上(比如imagenet),通过有监督的训练来完成的.这种有监督预训练加小的数据 ...
- C#判断网络链接状态
using System.Net.NetworkInformation; bool isLocalAreaConnected = NetworkInterface.GetIsNetworkAvaila ...
- 小程序封装wx.request,以及调用
1.新建一个api目录,与pages同级 2.在api目录下新建一个api.js文件 3.编写代码 const host = 'http://test.test.cn' const wxRequest ...
- python大佬养成计划----HTML DOM
什么是DOM? DOM (Document Object Model) 译为文档对象模型,是 HTML 和 XML 文档的编程接口.HTML DOM 定义了访问和操作 HTML 文档的标准方法.DOM ...
- 物联网消息队列协议MQTT
简介Mqtt是一个物联网消息传输协议 mosquitto是mqtt协议的一个开源实现,http://mosquitto.org/ paho是mqtt协议的客户端实现,这里主要用paho的mqtt ja ...
- mui.ajax中文乱码
估计这是个bug: //mui 的 ajax 中文乱码 var url = 'http://api.juheapi.com/japi/toh?key=1f26c107d8864bdfb98202bc3 ...