OFBIZ2.0精简版本应用概论-2

来源:百度文库 编辑:神马文学网 时间:2024/04/26 14:48:00
OFBIZ2.0精简版本应用概论
http://www.rdxx.com 02年03月28日 11:18 互联网
实体引擎的一个主要目标是尽可能的提供一种通用的代码结构,来消除在针对每一个实体的事物处理过程中,所有写死(hard code)的代码。 这种系统抽象所关注的问题,与那些把数据从数据库中提取出来,并以报表的形式进行输出和显示处理的报表管理或类似系统是不同的,而是类似于每日都可能发生很多事物处理的商业应用系统,实体引擎能大量节省构建类似应用系统的开发费用和戏剧性的减少因为系统存在大量写死的事务处理代码所产生的bug。这种类型的应用系统目前在OFBIZ中实现了一些,如电子商务,入库、出库的帐目管理,任务分配资源管理等等。这些工具能够用来报告和分析系统,但是并不意味着,它能包容千差万别的客户的应用需求,在实际应用中,我们可以基于它来做一些二次开发。
为了达到尽可能少的在系统中出现与针对特定实体操作有关的代码, 存储实体属性值的对象结构必须设计成通用的,可以用一个MAP对象来存贮实体的所有域(也可以叫字段或属性),通过实体的名称来区分它们是哪个实体的。根据字段的名称,用一个简单操作String数据的方法,来从值对象中读出或写入某字段的值,并且还可以验证给定名称的字段是否是该值对象的一个合法域。在实体引擎和应用系统之间建立了一个约定(体现实体结构定义文件和字段类型、Java数据类型、SQL字段类型映射关系的定义中),这个约定被定义在特定的XML文件中,以减少这种灵活性可能存在对系统不利的风险(如数据类型问题可能引起数据库系统崩溃等)。
代替不在系统中书写针对特定实体操作的的代码的方法之一,是把实体的定义放在XML文件中,在系统启动的时候,由实体引擎负责把这些结构定义加载进内存,并且在应用程序和数据源(通常指一个数据库或其它资源)之间建立一些对这些定义的使用规则。在这些XML实体定义中,对实体和属于它们的域,以某种规则和数据库中的表和表的字段建立映射关系。而且实体与实体之间的关系,实体域的数据类型,Java语言的数据类型,SQL 数据类型之间的映射关系,也被定义在XML文件中。 实体之间的关系还可以被命名,以用来区分不同实体组合之间的特定关系。
基于实体引擎这个抽象层,与特定实体操作有关的代码的编写就变的很容易创建和修改。 使用实体引擎所提供的APIs,编写处理实体持久性(增、删、改、查)的代码,可以不同的方式来配置,以便于实现针对实体持久性操作(增、删、改、查)有变化时,可以不改变代码本身,因为它并没有写死。这种抽象的一个典型应用场景就是你既可以通过JDBC直连方式,也可以通过调用运行在EJB服务器上的实体Bean(Entity Beans)的方式或者以其它方式,甚至在系统所提供的框架范围内,使用者运用自己扩充的方式去完成对实体持久性的改变等等。这些不同方式的切换并不需要对代码做任何改动,只需要修改配置文件。
OFBIZ已经完全实现了自己设计的一套实体引擎,可以直接使用。
 
实体引擎的好处举例说明如下:
以前的问题背景。
1、 你需要借助工具或手工去维护已经存在的或新增加的数据库结构(库结构,表结果等的定义和更新),如果要修改表结构和定义的话,怎么做?
2、 假设你的应用涉及200张表(实体),假设每张表(实体)都存在增、删、改、查,则需要在你的应用中静态构造(硬编码)800个sql语句。
3、 假设这200张表之间存在100种关系,维护每一种关系的增、删、改、查,又需要400个静态构造的sql语句。
4、 假设这些sql语句由10个不同水平的程序员来构造,构造出来的sql语句在执行性能上可能存在巨大差异,而且形态各异。
5、 这些硬编码的sql语句分布在大量Java程序的各个角落,一旦某张表的结构发生变化或者修改某一字段名或表名,意味着什么?意味着混乱!
OFBIZ是如何解决这些问题的: