1. 程式人生 > >【開源之路】溫蒂、一次簡單的嘗試

【開源之路】溫蒂、一次簡單的嘗試

## 乾點正事吧,巴巴託斯 #### ##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();