java 板


LINE

大家好 java 專案裡面多多少少會使用到反射機制寫程式 比較常見的像是 criteria ... 例如程式碼 final CriteriaQuery<User> q = cb.createQuery(User.class); final Root<User> users = q.from(User.class); final Predicate condition = cb.equal(users.get("privilegeLevel"), 5); q.select(users) .where(condition) .orderBy(cb.asc(users.get("userId"))); 其中 privilegeLevel 會直接對應到 entity 的 field 若是 entity 修改 privilegeLevel 欄位名稱,在 compile 階段並不會檢查到 而到真正 runtime 時才會發現錯誤。 想請問有無方法可以在 compile 時可以檢查的 ? (ide plugin 或 build tool plugin 都可) 除了 compile 檢查以下我目前知道以下幾種解法 1. 讓所有開發工程師都明白這件事情,在修改程式碼時會更小心注意。 2. 使用 http://goo.gl/zhhdLh 文章的方法。 3. 修改程式有發生錯誤的風險,所以不要修改程式。 方法 1... , 可讓發生錯誤降低,但無法保證不會發生... 方法 2... , 可以杜絕錯誤,但個人有點不愛,因為除了 Criteria 外還有 hql, 需要把整個專案(跟DB有關)翻掉重寫,我們專案沒有 test 流程, 若是人工修改人工測試,會消耗非常巨量的時間。 方法 3... , 最安全的做法,但我覺得同時也是最糟糕的做法。 三個方法要選的話我會選 1 不過目前想到最完美的方法就是有現成的 compile 時段就可以檢查的, 想請問各位前輩有無這種工具或套件,若沒有的話,你們專案是如何解決 這類問題的 !? --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.192.133
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1443350301.A.F12.html
1F:推 NullLife: 我覺得用ORM來說 改field的時候 就相當於下DDL改column 09/27 20:27
2F:→ NullLife: 名稱 也就等於你相關的SQL語句都必須修改 09/27 20:27
3F:→ NullLife: 除非用mapping啦,以JPA來說就有annotation可以不耦合 09/27 20:29
4F:→ NullLife: field名稱 所以我覺得重點還是在為什麼要去修改名稱勒? 09/27 20:30
並非為了修改名稱而修改名稱,在某些情況下可能會無意的修改,例如你要把 不同的專案的某些功能整合在一起,而他們有共用的 Entity,但是 Entity 又 不一致,在整合程式時若是在沒有警覺的情況下是有可能犯下這種錯誤。 Ex: 專案1 的 entity field name = iAmAField 專案2 的 entity field name = iAmAfield 方法 1 就是告知大家有這種情況,下次修改或整合程式時必須注意這種狀況。 是想說如果有現成的工具幫忙檢查會更好 XD。 ※ 編輯: cyclone350 (123.193.192.133), 09/27/2015 20:40:33
5F:推 NullLife: SOGA 工具我是不曉得 但用Eclipse的時候 在字串那邊 09/27 20:46
6F:→ NullLife: 就可以用ctrl點看看有無link 我覺得這已經夠方便了 XD 09/27 20:47
7F:→ qrtt1: 覺得寫 unit test 才是比較好的方法。 09/27 20:51
8F:→ wuliou: 我想你還是寫unit test吧 09/27 22:02
9F:→ bitlife: 有陽春工具可解決本篇問題,但對寫在sql內的field/table名 09/28 10:28
10F:→ bitlife: 稱修改就沒用,方法是把所有table及fields在coding時期從 09/28 10:28
11F:→ bitlife: db讀出來,每個table做成一個以table name為名的class,然 09/28 10:29
12F:→ bitlife: 後所有該table的欄位成為該對應class的final static字串 09/28 10:29
13F:→ bitlife: 假設需要A表格的b欄位,程式就寫A.b 09/28 10:30
14F:→ bitlife: 當table有變動,就重跑一次抓表格/欄位工具,哪裏編不過就 09/28 10:31
15F:→ bitlife: 知道了 09/28 10:31
16F:→ swpoker: 這種就只能執行時才能知道~所以unit test吧 09/30 10:16
17F:→ marsyang1: http://stackoverflow.com/questions/3037593/how-to- 10/01 18:33
18F:→ marsyang1: generate-jpa-2-0-metamodel 10/01 18:33
19F:→ marsyang1: 參考參考,我自己是用spring data,為了整合性使用quer 10/01 18:35
20F:→ marsyang1: y dsl,但做法都差不多。 10/01 18:35
21F:推 marsyang1: 組query會是用metamodel的class,不會用反射 10/01 18:38
感謝大家回應 :) 先回 unit test 的部分,其實一直有在補啦 ><,因為這是一個蠻有歷史的專案, 交給我的時候... 有點亂就是了... 所以一有空閒時間就會 1. 看程式補文件 2. 重構 3. 補 unit test 不過這一部分老闆不正視就很難騰出時間。 spring data 的方案花的成本跟原先 2 是一樣的。 個人也覺得 spring data 很好用,之前開發新專案就是用 spring data。 目前看來應該只能方法1 跟補足 unit test 並行了 ※ 編輯: cyclone350 (123.193.192.133), 10/04/2015 14:45:36
22F:→ adrianshum: 我有想過用類似 Mockito 的做法寫Util 去 runtime 10/08 09:29
23F:→ adrianshum: 生成 method name e.g.nameOf(c(Foo.class).method()) 10/08 09:30
24F:→ adrianshum: 不過因為某些原因沒有動手做。可以考慮 10/08 09:31
25F:→ adrianshum: 不過 property name/variable name 真的有點難搞 10/08 09:32
26F:→ adrianshum: QueryDSL 應該是暫時最可行的做法了 10/08 09:32







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP