日期:2014-05-19 浏览次数:20672 次
?在一个J2EE中,当项目的主要业务逻辑要划分为多个模块时(及要划分出多个ejb的jar包),会遇到模块之间双向依赖的情况。下面按照我在项目的实际情况为例来说明。
我所在的项目是一个钢铁公司的生产控制系统(MES)。其中有两个模块(计划管理和库管理)分别以EJB的项目来开发, 在计划管理模块中有一个制定生产计划的功能,这个功能中会查询库存信息。而库存信息的获取要使用到调用库管理模块的实体类或服务方法。这个时候计划管理模块就会依赖于库管理模块。
在库管理模块中有追踪查询库存中各种物品是由哪个计划号下达的功能,这个功能中获取计划号下的相应计划信息。又会依赖计划管理模块。这时就产生了项目模块之间的双向依赖,如图所示:
如果当这两个模块之间会有很多的相互调用,则考虑将这两个模块合并为一个项目。但是在现实中项目往往不会接受这样一个结果。(如产品化或单独热部署等各种原因。)所以,我们就需要考虑去掉一个方向的依赖,最终使模块之间的依赖是单向的。
一般情况下模块之间的依赖分为两种情况:
1.一个就是依赖其它模块的业务方法
当是依赖其它模块的业务方法的时候,我们可以考虑将这个业务方法中的业务逻辑移到自己模块中的业务方法中。
2.另一个是依赖其它模块的实体类
当是依赖其它模块的实体类时,我们也可以考虑将这个实体类移动到自己模块中。
除此之外还有另一个方法,就是查询的实体结果使用数组的方式。这样就不会依赖其它模块的实体了,但这样又会造成代码可读性差难以维护的问题。
?
如果系统中的模块太多时,可以考虑将模块之间双向依赖的业务方法和实体类统一放到一个公共模块中,这样所有的双向依赖问题就解决了。
?
?
?
?