大家好,,我是技術(shù)UP主小傅哥。
公司明確要求禁止在項目中使用 BeanUtils.copyProperties
復(fù)制對象,,不僅是因為性能問題,,更多是這種方式根本不知道有哪些對象屬性被轉(zhuǎn)換了。而手動編碼 x.set(y.get) 是最穩(wěn)定可靠處理方式,。
但如果有幾十個屬性怎么辦??,!那么你可以立即安裝這款免費的 vo2dto v2.5.5 版本插件,。截止到目前小傅哥開發(fā)的這款插件已經(jīng)有 20.1k 安裝量,!
IDEA Plugin vo2dto 是一款用于幫助使用 IntelliJ IDEA 編寫代碼的研發(fā)人員,快速生成兩個對象轉(zhuǎn)換過程中所需要大量的 x.set(y.get)
代碼塊的插件工具,。在最新 v2.5.1 版本中已支持 Lombok.Builder 模式,,讓使用可絲滑得嘞!
文末提供了此插件的源碼地址,,你可以針對使用優(yōu)化提交PR,,以后那么多人的使用,都會看見你的貢獻??,。
? 特性
- 2個對象的轉(zhuǎn)換操作,,通過復(fù)制 X x 對象,轉(zhuǎn)換給 Y y 對象
- 允許使用 lombok 對象轉(zhuǎn)換,、lombok 和普通對象轉(zhuǎn)換,,對于 serialVersionUID 屬性過濾
- 含記憶功能的彈窗選擇映射關(guān)系,,支持全量對象,、支持匹配對象、也支持空轉(zhuǎn)換,,生成一組set但無get的對象
- 支持 Lombok.Builder 模式創(chuàng)建轉(zhuǎn)換對象
- 支持類的內(nèi)部類對象,,進行轉(zhuǎn)換 新功能 v2.5.5
??????? 重構(gòu)
這次我要說說重構(gòu)!
其實最開始這個項目并不大,簡單的建了個抽象模板類定義執(zhí)行步驟,,方法都寫在子類里,。三下五除二就完成了對象轉(zhuǎn)換功能。
但隨著小伙伴們不斷的提出一些使用訴求后,,這里的邏輯變得的復(fù)雜了,并且由于本身 IDEA Plugin 的開發(fā),,很多時候都要一點點的處理那些對象屬性的數(shù)據(jù),,兼容各種類文件所在的包信息,,還有Lombok以及類的內(nèi)部類。所以,,每次維護起來都像是重新寫一遍一樣,。時間一長,,都不認(rèn)識它了,!
所以,,為了改變這種情況,。在 v2.5.5 版本的開發(fā)中,做了首次的工程重構(gòu),,把流水面條的代碼,,用規(guī)則樹拆分,,讓不同的節(jié)點實現(xiàn)不同的功能,。優(yōu)雅的效果,,如圖;
這是一套規(guī)則樹的模型結(jié)構(gòu),,在 vo2dto 插件開發(fā)中的實踐使用,。關(guān)于這塊的設(shè)計模式可以在這里學(xué)習(xí),;https:///md/develop/design-pattern/2024-08-25-chain-tree.html
通過節(jié)點功能對邏輯邊界的拆解,,讓每一塊功能區(qū)都可以顯而易見的找到和處理,這樣即使是過去很長時間,,在看這段代碼也能很輕松的知道每一塊在干什么,。其實代碼寫的最好的目標(biāo)就是看代碼就像看文檔,用類劃分邊界比只單純的疊加方法要清晰的多,。
- 重構(gòu)前:https://github.com/fuzhengwei/vo2dto/tree/2.5.4
- 重構(gòu)后:https://github.com/fuzhengwei/vo2dto/tree/2.5.5
如果感興趣這樣一個處理,,可以進入到重構(gòu)前后的代碼,看看設(shè)計模式如何處理的這部分邏輯,,怎么拆分的上下文邏輯,??梢哉f非常優(yōu)雅,!
??? 安裝
1. 在線安裝
IDEA Plugin 搜索vo2dto直接在線安裝即可 |
---|
|
2. 手動安裝
- 下載:https://github.com/fuzhengwei/vo2dto/releases/tag/v2.5.5
IDEA Plugin 手動安裝,,導(dǎo)入下載包 |
---|
|
?? 使用
- 視頻:https://www.bilibili.com/video/BV13Y411h7fv -
視頻內(nèi)有完整的使用介紹和插件設(shè)計
- 描述:你需要復(fù)制被轉(zhuǎn)換 X x = new X() 中的 X x 部分,,無論它是方法入?yún)⑦€是實例化或者是接口回值,,接下來鼠標(biāo)定位到轉(zhuǎn)換對象 Y y 上,可以定位到
類 大Y
,、或者屬性 小y
,,這樣我就可以知道你要做到是X的對象的屬性值,,轉(zhuǎn)換到Y(jié)對象的屬性值上。接下來幫你快速生成全部的 y.set(x.get)
代碼片段,。
IDEA Plugin vo2dto 使用演示圖 |
---|
|
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
public class ApiTest {
/**
* 普通模式
*/
public void test_vo2dto01(UserVO user) {
UserDTO userDTO = new UserDTO();
userDTO.setUserId(user.getUserId());
userDTO.setUserNickName(user.getUserNickName());
userDTO.setUserHead(user.getUserHead());
}
/**
* lombok Builder 模式
*/
public void test_vo2dto02(UserVO user) {
UserDTO userDTO = UserDTO.builder()
.userId(user.getUserId())
.userNickName(user.getUserNickName())
.userHead(user.getUserHead())
.build();
}
/**
* 類的內(nèi)部類轉(zhuǎn)換
*/
public void test(UserDTO userDTO) {
UserVO.UserVO2 userVO2
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
static class UserDTO {
private String userId;
private String userIdx;
private String userNickName;
private String userHead;
private int page;
private int rows;
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
static class UserVO {
private Long id;
private String userId;
private String userNickName;
private String userHead;
private String userPassword;
private Date createTime;
private Date updateTime;
}
}
- 注意;v2.5.5 版本已支持了
類的內(nèi)部類
模式,,如圖使用方式即可完成創(chuàng)建過程,。
?? 成長
如果你的簡歷也能有一個這樣的小組件,,讓那么多的程序員???????進行使用,,那么對你的面試簡歷來說也是非常亮眼的一筆,。
包括,;這樣的組件,還有,;OpenAI 代碼自動評審,、透視業(yè)務(wù)監(jiān)控、動態(tài)線程池,,以及大量的業(yè)務(wù)項目,;大營銷平臺、小型支付商城,、拼團交易等,你都可以跟著小傅哥一起學(xué)習(xí),。?? 踩在我的肩膀,,你能看的更遠,走的更快,,上的更高,!