2017-07-29 67 views
2

在我的Java Spring應用程序中,我有一個帶有方法的DAO類。我想知道哪些訪問修飾符使用:protectedpublic春季DAO類的方法 - 保護與公共?

在哪種情況下我們應該使用protected修飾符?我不知道什麼時候應該使用protected修飾符,所以我總是使用public。這是正確的方式嗎?

+0

我鼓勵您查看訪問修飾符以及何時使用它們,如同其他普通對象一樣,dao類中的方法應該與其他常規對象一樣使用https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html如果他們將被其他對象調用,就可以被公開,如果你不想公開一些,然後讓他們受到保護或私密,這是完全正常的 – karelss

回答

2

受保護對於DAO並不合適,因爲您需要其他包中的方法,而不需要實現DAO的類。因此,公衆幾乎總是要走。

+0

這不是完全準確 – karelss

+0

@karelss爲什麼你認爲那? – michigan

+0

由於DAO可以繼承,您可以定義受保護的方法來幫助操作,也許您可​​以訪問Web服務,而不是數據庫,並且定義私有或受保護的方法可以幫助您設計諸如驗證或服務創建等交叉功能以將其與的funcionality。我認爲所有公開的內容都是錯誤的,因爲在某些情況下,可能導致設計不好的界面和開發更大的方法,而且如果你需要定義很多公共方法,也許這個類應該是分裂成兩個或更多。 – karelss

3

DAO層主要用於數據庫事務。例如:保存,更新,提取等。

現在他們沒有任何業務邏輯,因爲我們把業務邏輯放在服務層。通常,此服務層在需要執行數據庫相關工作時會調用DAO層。

因此,public應該在大多數情況下使用(因爲它們從不同的層/包中調用)。

當您確定您只會從相同的包(或子類)進行調用時,受保護很好,但並非總是如此。所以不,protected不建議。

2

對於DAO類,您應該創建一個與Dao方法聲明的接口(這顯然是公開的)。你的DAO類應該擴展接口。通過這種方式,您的Dao方法將通過接口引用從其他類訪問。

這是更好的方法,因爲它會很容易測試。您可以提供DAO接口的模擬實現來測試您的代碼。您可以在編寫實際的DAO類之前執行此操作。如果您使用接口引用變量調用DAO方法,那麼您可以更改DAO類,它仍然可以工作,因爲您正在更改該類,而不是您調用方法時使用的引用的接口(例如重命名類名稱)。

這是一個重要的設計原則,你應該總是儘可能地爲接口編寫代碼。我建議你看this answer來了解你爲什麼要在DAO中編寫接口代碼。

在繼承的情況下,您應該使用受保護的修飾符。當你想要在包外部時,只有子類應該能夠訪問你的類的方法和屬性。當你需要做某些不應該暴露在公共API中但仍需要被子類覆蓋的例子,例如template method pattern