## 包的組織
我認為一個好的架構關鍵因素之一是代碼/包的組織:程序員瀏覽源代碼遇到的第一件事情就是包結構。一切從它流出,一切依賴于它。
我們能夠辨別出將應用程序封裝進入包(package)的2個路徑:
* 按層分包:每一個包(package)中包含的項通常不是彼此密切相關的。這樣包的內聚性低、模塊化程度低,包之間偶合度高。因此,編輯某個特性要編輯來自不同包的文件。另外,單次操作幾乎不可能刪除掉某個功能特性。
* 按特性分包:用包來體現特性集。把所有相關某一特性(且僅特性相關)的項放入一個包中。這樣包的內聚性高,模塊化程度高,包之間偶合度低。緊密相關的項放在一起。它們沒有分散到整個應用程序中。
我的建議是去掉按特性分包,會帶來的好處有以下主要幾點:
* 模塊化程度更高
* 代碼導航更容易
* 功能特性的作用域范圍最小化了
如果與功能特性團隊一起工作(就像我們在@SoundCloud的所作所為),也會是非常有趣的事情。代碼的所有權會更容易組織,也更容易被模塊化。在許多開發人員共用一個代碼庫的成長型組織當中,這是一種成功。
?
如你所見,我的方法看起來就像按層分包:這里我可能會犯錯(例如,在“users”下組織一切),但在這種情況下我會原諒自己,因為這是個以學習為目的的例子,而且我想顯示的是清晰架構方法的主要概念。領會其意,切勿盲目模仿:-)。