OFBiz entity engine中的设计模式总结

本文结合Apache OFBiz源码,总结了OFBiz中应用的典型J2EE设计模式,包括业务代表模式、传输对象模式、复合实体模式、传输对象组装器模式和服务定位器模式。OFBiz通过这些模式实现了高效的数据访问和减少网络开销。
摘要由CSDN通过智能技术生成

最近同时在看《Core J2EE Patterns》跟ApacheOFBiz 源码,确实正如OFBiz官方介绍的那样,OFBiz应用了该书中的很多经典的设计模式。本篇结合OFBiz的源码试图总结一下其中用到的几个典型的Patterns。

典型的J2EE模式

业务代表模式

业务代表模式主要目的是用于隐藏业务逻辑对于调用端的实现,消除不同层次之间的耦合,它封装了业务服务的访问。

OFBiz中对于业务代表模式的实现令人印象深刻,因为它在service跟entity engine层都实现了该模式。这里我们只讨论entity engine中的实现。

在org.ofbiz.entity下有一个Delegator接口,它就是其他层跟持久层打交道的入口。

OFBiz默认给出了一个实现:GenericDelegator:


Delegator几乎提供了对所有数据访问需求的抽象,包括:数据缓存管理、事务管理、主键管理、查找、创建、更新、删除等。这有些颠覆我们想象中的开发模式,没错,这种方式跟我们通常的开发方式有些不一样。我们通常会基于数据库的设计来构建entity,然后基于每个entity构建DAO(或者把这个任务交给ORM框架)。但OFBiz不是这么做的(想象一下,如果它这么做了,它也实现不了现在的业务代表模式),在OFBiz entity engine中,并没有针对o-r mapping构建出来的entity,取而代之的是一个通用的、泛化的实体,而且不仅仅是如此,这里包括sql语句的组成部分都是被抽象过之后形成的“语义层”,通过XML配置来完成实体、关系的定义。这才给了OFbiz实现业务代表模式的可能。

它如何实现用一个业务代表,代理了所有数据访问?

我们看到它有两个名为getEntityHelper方法的重载,它们都返回GenericHelper对象。这里我们需要来了解几个entityengine内部的辅助对象:

GenericDAO:实现了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值