2011-01-27 32 views
6

我习惯把一切都放在包这样的:模块VS在Java包结构层

com.company.app.module1 
com.company.app.module2 

但它使基于软件包的AOP切入点困难,并导致需要一个IDE有道理巨大的包的。

所以现在我意识到我需要更深层次的封装结构,但我总是被撕裂。给模块首选项,像这样?

com.company.app.module1.domain 
com.company.app.module1.logic 
com.company.app.module1.persistence 
com.company.app.module2.domain 
com.company.app.module2.logic 
com.company.app.module2.persistence 

或给层的偏好,像这样?

com.company.app.domain.module1 
com.company.app.domain.module2 
com.company.app.logic.module1 
com.company.app.logic.module2 
com.company.app.persistence.module1 
com.company.app.persistence.module2 

每个的优缺点?

+0

您使用的是什么AOP? – Bozho 2011-01-28 09:51:45

回答

7

模块优先。

我有一个最初是第一层的项目,但它太笨重,无法读取和维护,所以我们重构了它。它也使用AOP - 没有任何问题。我们在包定义的中间使用了..(我们在springjop中使用了aspectj语法)。下面是它的样子:

execution(* com.foo.app.modules..service..*.*(..)) 

这二者匹配modules.module1.servicemodules.module2.service

+0

AOP表达式的重要提示,谢谢! – 2011-02-02 00:36:35

3

按模块组织允许开发人员将功能集作为交付单位而不是技术基础设施。如果你基于模块分解东西,那么扩展你的代码库可能会更容易 - 一些我看过的代码(例如Artifactory和Continuum)以这种方式组织东西的开源项目,但是我没有足够的了解这个东西是大势所趋。

它可能取决于您的代码库大小。

+0

这也是隔离与代码共享之间的选择。如果你使用模块结构(包含所有领域对象,服务,道奇,无论是在自己的包中的独立功能),那么你在哪里放置属于所有模块的东西?你最终会创建一个共享包,同时包含所有的共享域对象,服务,道数等等。如果有很多共享代码,它会变得臃肿,你可能最终将它们分成几层,真的。这是我至少要面对的一个问题:/ – 2012-08-13 18:43:11

2

我承认,我从来没有真正做过很多(正式的)AOP。

就个人而言,我会先把模块。这样,如果您稍后将模块拆分为多个JAR/WAR文件(例如,单独的maven项目),它们已经位于正确的目录结构中,可以按模块拆分它们。

1

我会按层组织层次结构以允许您的工具工作。每个模块都会使用自己的源文件夹进入自己的项目。这使您的IDE和开发人员轻松实现面向模块的分组,但是您的运行时工具易于使用面向层的分组。

1

我宁愿把模块首先为好,但在我看来,这样做,你要到处引用的一切。这可能是开发人员之间混淆的原因。