【開源之路】溫蒂、一次簡單的嘗試
阿新 • • 發佈:2020-11-23
## 乾點正事吧,巴巴託斯
#### ##V1.01 2020/11/23 溫蒂類資訊對比處理工具包,目前可以用來對比更新前後的類資訊。
---
[weed的github地址](https://github.com/alexRyccc/weed)
因為工作中需要進行資料對比,所以經常需要在程式碼的增刪改查操作中嵌入一些對比類。我們都知道開閉原則:對修改關閉,對擴充套件開放。所以每次修改的時候都需要新增一個類,然後再通知用到了原始類的同事一起同步修改程式碼。如果方法涉及到的模組少,還可以比較輕鬆的解決,但是如果用到的地方比較多,那需要協調的地方也會增多。
### 偷懶是人類文明發展的驅動力
於是,為了解決新增資料對比方法的苦惱,也為了儘量使用少侵入的模式,在工作之餘,我也開始思考是不是把放進去的程式碼再抽出來。思考再三,決定用註解模式解決這個問題,於是乎,就有了weed這一個工具的出現。
當然,現在只是一塊不到一千行程式碼,解決不了絕大多數問題的小工具包。
### 目前可以公開的情報
- 1、contrastSourceFundByBean方法專門用來對比兩個類物件的資訊,類中可以包含任意類 ,但是要記得在類中類加註解。
- 2、getListupdateOnly方法專門用來對比兩個集合的資訊,集合中不可包含類,只能是純基礎物件的集合,以後會慢慢更新。
- 3、judgeArray方法用來比較兩個陣列之間的資訊,陣列可以是任意類。
- 4、註解預設都是可以不加的,需要加的時候是需要用到的時候。
- 5、這個專案是因為日常給後臺人員提供資訊對比類的時候想到的,就寫出來應該有一點用吧?大家就不用重複造輪子了。
- 6、weed代表著我第一個十連出了溫蒂,第二個十連就出了可莉,第三個十連出了盧姥爺, 其實我挺難受的,香菱60出了可莉,可莉70、武器也70,一整套魔女的時候出了盧姥爺,哎。。。不想要火C了
## 設計思路
既然決定使用少侵入的模式,那麼使用註解的方法就是一個不錯的解決方式。
因為網上都有如何使用自定義註解的教程,我這裡也就不再班門弄斧,主要展示一下我大概的設計思路。
```
@Target(java.lang.annotation.ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckField {
/**
* 欄位最小長度
*/
int minlen() default 0;
/**
* 欄位最大長度
*/
int maxlen() default Short.MAX_VALUE;
/**
* 欄位是否需要校驗
*/
Check check() default Check.unchecks;
/**
* 欄位名(用於後期獲取)
*/
String name() default "";
/**
* 欄位型別
*/
Check type() default Check.basics;
}
```
校驗欄位列舉類,這裡也主要體現的是一種思路,也是目前提供的解決方案:無論你是基礎型別,還是物件、陣列,亦或是集合,目前都有辦法進行對比,也能拿到所需要的資料。
```
public enum Check {
/**
* 檢查
*/
checks,
/**
* 不檢查
*/
unchecks,
/**
* 物件
*/
beans,
/**
* 陣列
*/
arrays,
/**
* 集合
*/
sets,
/**
* 基礎資料型別
*/
basics,
}
```
最後就是其中的一個方法了,看過我過去文章的同學能夠發現,這個方法是在之前的基礎上進行了改動,加大了對註解的應用。
```
/**
* @param oldBean 原始資料
* @param newBean 新資料
* @return 根據傳入的物件返回變化值
*/
public static String contrastSourceFundByBean(Object oldBean, Object newBean) {
StringBuilder str = new StringBuilder();
Object pojo1 = (Object) oldBean;
Object pojo2 = (Object) newBean;
if (!(pojo1.getClass()==pojo2.getClass())){
return "物件型別不一致";
}
try {
Class clazz = pojo1.getClass();
Field[] fields = pojo1.getClass().getDeclaredFields();