第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Lombok 項目是否與使用 getter 和 setter 的數(shù)據(jù)封裝相矛盾?

Lombok 項目是否與使用 getter 和 setter 的數(shù)據(jù)封裝相矛盾?

素胚勾勒不出你 2023-11-10 16:43:39
聲明私有變量并通過公共 getter/setter 方法(Java 中的封裝原理)訪問它,可以在 setter 方法中添加自定義驗證。例如:如果我setBalance()在 Class 的 setter 方法中放置負數(shù)驗證Bank,我可以限制Bank. 這意味著可以限制字段中的意外更改。所以如果我使用 lombok,顯然我不需要定義 getter/setter 方法。我可以做什么來合并上述驗證。這不會限制Java的數(shù)據(jù)封裝特性的利用嗎?
查看完整描述

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 上使用注釋。


查看完整回答
反對 回復 2023-11-10
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

是的。你是對的。所以你應該根據(jù)上下文謹慎使用它。

如果一個對象是一個富域對象,那么簡單地@Setter為其所有字段添加公共設置器可能是一個壞主意,因為客戶端可以輕松地將任何字段設置為任何值,而無需調用封裝所有應完成的業(yè)務邏輯的正確方法。 。所以最終,對象的狀態(tài)可能是不正確的。

但如果對象只是作為一個數(shù)據(jù)容器,沒有任何業(yè)務邏輯(例如DTO),使用@Setter/@Getter可以節(jié)省你一些時間,并使代碼噪音更少。


查看完整回答
反對 回復 2023-11-10
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

它不會破壞數(shù)據(jù)封裝,而是使其更加方便:簡單的 getter 和 setter 只是噪音。

如果您的代碼需要除簡單的獲取或設置之外的其他內容,那么顯然自動生成它們是沒有意義的——但這是一個正交問題:您也無法手動完成。

您將受限訪問與業(yè)務邏輯混為一談。

無論如何:您也許能夠使用 AOP 系統(tǒng)在自動生成的函數(shù)周圍放置保護子句,但您需要強制執(zhí)行處理器運行的順序。在我看來,這會造成混亂并產生額外的認知開銷:業(yè)務邏輯要么是顯式的,要么是分層在顯式代碼之上的。


查看完整回答
反對 回復 2023-11-10
  • 3 回答
  • 0 關注
  • 221 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號