在我的Java Spring應用程序中,我有一個帶有方法的DAO類。我想知道哪些訪問修飾符使用:protected
或public
?春季DAO類的方法 - 保護與公共?
在哪種情況下我們應該使用protected
修飾符?我不知道什麼時候應該使用protected
修飾符,所以我總是使用public
。這是正確的方式嗎?
在我的Java Spring應用程序中,我有一個帶有方法的DAO類。我想知道哪些訪問修飾符使用:protected
或public
?春季DAO類的方法 - 保護與公共?
在哪種情況下我們應該使用protected
修飾符?我不知道什麼時候應該使用protected
修飾符,所以我總是使用public
。這是正確的方式嗎?
DAO層主要用於數據庫事務。例如:保存,更新,提取等。
現在他們沒有任何業務邏輯,因爲我們把業務邏輯放在服務層。通常,此服務層在需要執行數據庫相關工作時會調用DAO層。
因此,public
應該在大多數情況下使用(因爲它們從不同的層/包中調用)。
當您確定您只會從相同的包(或子類)進行調用時,受保護很好,但並非總是如此。所以不,protected
不建議。
對於DAO類,您應該創建一個與Dao方法聲明的接口(這顯然是公開的)。你的DAO類應該擴展接口。通過這種方式,您的Dao方法將通過接口引用從其他類訪問。
這是更好的方法,因爲它會很容易測試。您可以提供DAO接口的模擬實現來測試您的代碼。您可以在編寫實際的DAO類之前執行此操作。如果您使用接口引用變量調用DAO方法,那麼您可以更改DAO類,它仍然可以工作,因爲您正在更改該類,而不是您調用方法時使用的引用的接口(例如重命名類名稱)。
這是一個重要的設計原則,你應該總是儘可能地爲接口編寫代碼。我建議你看this answer來了解你爲什麼要在DAO中編寫接口代碼。
在繼承的情況下,您應該使用受保護的修飾符。當你想要在包外部時,只有子類應該能夠訪問你的類的方法和屬性。當你需要做某些不應該暴露在公共API中但仍需要被子類覆蓋的例子,例如template method pattern。
我鼓勵您查看訪問修飾符以及何時使用它們,如同其他普通對象一樣,dao類中的方法應該與其他常規對象一樣使用https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html如果他們將被其他對象調用,就可以被公開,如果你不想公開一些,然後讓他們受到保護或私密,這是完全正常的 – karelss