1. 程式人生 > >按特徵組織——最好的Java工程目錄結構組織方式

按特徵組織——最好的Java工程目錄結構組織方式

按特徵組織

按特徵組織是指用包名來標識特徵。目的是把所有相關的項歸結到一個單一的特徵,並放置到唯一的目錄中。這使得包有高聚合性和高模組性,同時與其他的包之間的耦合性最小,這樣屬於同一項的檔案都放在一起,不會分散在專案的不同地方,以後如果刪除功能的時候直接刪除一個包就可以了。
按特徵組織包結構,包的名字很重要,必須是高度概括的名稱。比如一個開藥方的程式可以如下組織:

  • com.app.doctor
  • com.app.drug
  • com.app.patient
  • com.app.presription
  • com.app.report
  • com.app.security
  • com.app.webmaster
  • com.app.util

  • 每個包內都只含有強相關的特徵而沒有任何其他的特徵。比如com.app.doctor包可能含有這些專案:
  • DoctorAction.java - 一個action或者controller物件
  • Doctor.java - 一個模型物件
  • DoctorDAO.java - 一個DAO物件
  • database項(SQL語句相關)
  • 使用者介面(網頁頁面)
    注意每個包不僅僅是包含java檔案,同時可以包含有其他型別的檔案。為了實現按特徵組織,所有的檔案都必須與某一特徵相關,並且必須被放置到相應的包中。
    按特徵組織並不是說所有的包之間都是完全獨立的,對於只在本包中使用的方法需要使用default來保證只有本包的可見性,而只對必須向外界開放的方法使用public。

按層次組織

按層次組織則是將所有的包按層次結構組織,比如:

  • com.app.action
  • com.app.model
  • com.app.dao
  • com.app.util
    每一個特徵都被分散到了不同的包中,每個包中的內容都是低相關性的,導致的結果就是修改一個特徵會去很多不同的包中。

總結

在這兩種方法中進行比較,更加推薦使用按特徵組織的方式,按特徵組織的方式有如下優點:

高模組性

如上所說,按特徵組織的程式碼具有高聚合性和低耦合性。

更方便的程式碼尋找

程式設計師不再需要做很多尋找程式碼的工作,因為所有相關的程式碼都在同一個包中。

高度抽象性

保持高度抽象性是程式設計師長久的追求,特徵的劃分使得程式設計師可以在更高的層次上考慮問題而不需要考慮過多的細節。

按特徵組織的同時同樣保持了層次性

按特徵組織仍然有層次的劃分,只是這個劃分不再是按照包的層級而是按照檔案的層級。

最小的可見性

低可見性也是程式所追求的目標,按特徵劃分的情況下優先考慮的是package-private而不是public,這使得包中的程式碼對包外的影響降到最低。

更高的程式碼成長性

隨著專案的逐漸增多,如果按照層次組織包結構,會導致每個包中的檔案越來越多,但是如果說是按特徵劃分,每個包中檔案的數量總是在一個可控的範圍之內,增加的只是包的數量。

參考文獻:

Package by feature, not layer

Package by Feature Is Demanded