3 回答

TA貢獻1864條經驗 獲得超2個贊
通過使用@Getter
,?@Setter
,@Data
或@Value
?Lombok會自動生成您字段的公共訪問器,如果您不需要公開AccessLevel.NONE
可以在@Getter
,上使用的字段@Setter
。使用 lombok 可以尊重
封裝。
我建議您將數(shù)據(jù)結構和可以對其執(zhí)行的操作(例如驗證)視為單獨的關注點。通過這種方式,您將能夠分別修改數(shù)據(jù)和驗證。為了實現(xiàn)這一點,您可以使用一些框架,如spring或aspectj。
如果您覺得這種方法對您的應用程序來說太過分了,您可以求助于不可變數(shù)據(jù)結構 (?@Value
) 以及用于創(chuàng)建實例的私有構造函數(shù)和靜態(tài)方法。這些方法將執(zhí)行必要的驗證。
在類上添加驗證的另一種方法是使用hibernate 驗證在 getter 上使用注釋。

TA貢獻1805條經驗 獲得超10個贊
是的。你是對的。所以你應該根據(jù)上下文謹慎使用它。
如果一個對象是一個富域對象,那么簡單地@Setter
為其所有字段添加公共設置器可能是一個壞主意,因為客戶端可以輕松地將任何字段設置為任何值,而無需調用封裝所有應完成的業(yè)務邏輯的正確方法。 。所以最終,對象的狀態(tài)可能是不正確的。
但如果對象只是作為一個數(shù)據(jù)容器,沒有任何業(yè)務邏輯(例如DTO),使用@Setter
/@Getter
可以節(jié)省你一些時間,并使代碼噪音更少。

TA貢獻1846條經驗 獲得超7個贊
它不會破壞數(shù)據(jù)封裝,而是使其更加方便:簡單的 getter 和 setter 只是噪音。
如果您的代碼需要除簡單的獲取或設置之外的其他內容,那么顯然自動生成它們是沒有意義的——但這是一個正交問題:您也無法手動完成。
您將受限訪問與業(yè)務邏輯混為一談。
無論如何:您也許能夠使用 AOP 系統(tǒng)在自動生成的函數(shù)周圍放置保護子句,但您需要強制執(zhí)行處理器運行的順序。在我看來,這會造成混亂并產生額外的認知開銷:業(yè)務邏輯要么是顯式的,要么是分層在顯式代碼之上的。
添加回答
舉報