2011-04-11 164 views
0

Java Web應用程序,什麼是術語「封裝結構」和「目錄結構」的確切含義是什麼?他們不一樣嗎?我看到一些文章有這兩個術語,但我不確定確切的含義和差異。封裝結構和目錄結構

回答

2

軟件包是一起更改的代碼集合,一起使用並一起發貨。所以一個罐子/戰爭是一個包裝。

Package Design Principles

我明白你的意思源碼包,這更像是目錄結構。但我相信,目錄是硬盤上的物理表示。

編輯:我已經掌握了3年多的原始答案。但沒有改變,因爲它被接受。但現在改變它,以便任何新的訪問者可能會受益,也可以避免鏈接腐爛。根據下面的討論可以提取包的一些附加含義。例如,一個jar包是一個包嗎?

重複使用的類應該打包在一起,以便可以將該包視爲可供您使用的完整產品。而那些被重用的應該與那些不被重用的那些分開。例如,您的日誌工具類不一定與您的文件io類一起使用。因此打包所有記錄他們分開。但是伐木班可能會彼此相關。因此,創建一種完整的產品來記錄日誌,比如說爲了更好的名稱commons-logging將它打包在一個(重新)可用的jar中,另一個單獨的完整產品用於io實用程序, io.jar。如果你更新說commons-io庫來說支持java nio,那麼你可能不一定要對日誌庫做任何改變。所以分開它們會更好。

現在,假設您希望您的日誌記錄實用程序類支持結構化日誌記錄,以便使用splunk等工具進行某種日誌分析。日誌工具的某些客戶端可能想要更新到新版本;其他人可能不會。因此,當您發佈新版本時,請將所有需要並重新用於遷移的類打包。因此,您的實用程序類的一些客戶端可以安全地刪除舊的公共日誌記錄jar並移至commons-logging-jar。其他一些客戶仍然可以使用較舊的jar。然而,沒有客戶需要這兩個罐子(新舊罐子),只是因爲你迫使他們使用一些舊罐子的罐子。

避免循環依賴。 a取決於b; b對c;條件;但是d取決於a。這種情況顯然會阻止,因爲定義圖層或模塊等非常困難,您不能相互獨立地改變它們。另外,你可以打包你的類,如果一個圖層或模塊發生了變化,其他模塊或圖層就不一定必須改變。因此,例如,如果您決定從舊的MVC框架轉到其他API升級,那麼只有視圖和控制器可能需要更改;你的模型沒有。

2

在大多數Java應用程序中,包結構應該與.java和.class文件的目錄結構匹配。但是,這些目錄是更大目錄結構的一部分,包括除源和/或字節碼之外的其他數據。

根據上下文的不同,「包結構」也可能指的是交付包,每個包含應用程序或庫。