2011-01-27 66 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

我寧願把模塊首先爲好,但在我看來,這樣做,你要到處引用的一切。這可能是開發人員之間混淆的原因。