[問題] Java 反射機制於 compile 時檢查
大家好
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://www.ptt.cc/bbs/java/M.1443350301.A.F12.html
推
09/27 20:27, , 1F
09/27 20:27, 1F
→
09/27 20:27, , 2F
09/27 20:27, 2F
→
09/27 20:29, , 3F
09/27 20:29, 3F
→
09/27 20:30, , 4F
09/27 20:30, 4F
並非為了修改名稱而修改名稱,在某些情況下可能會無意的修改,例如你要把
不同的專案的某些功能整合在一起,而他們有共用的 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
推
09/27 20:46, , 5F
09/27 20:46, 5F
→
09/27 20:47, , 6F
09/27 20:47, 6F
→
09/27 20:51, , 7F
09/27 20:51, 7F
→
09/27 22:02, , 8F
09/27 22:02, 8F
→
09/28 10:28, , 9F
09/28 10:28, 9F
→
09/28 10:28, , 10F
09/28 10:28, 10F
→
09/28 10:29, , 11F
09/28 10:29, 11F
→
09/28 10:29, , 12F
09/28 10:29, 12F
→
09/28 10:30, , 13F
09/28 10:30, 13F
→
09/28 10:31, , 14F
09/28 10:31, 14F
→
09/28 10:31, , 15F
09/28 10:31, 15F
→
09/30 10:16, , 16F
09/30 10:16, 16F
→
10/01 18:33, , 17F
10/01 18:33, 17F
→
10/01 18:33, , 18F
10/01 18:33, 18F
→
10/01 18:35, , 19F
10/01 18:35, 19F
→
10/01 18:35, , 20F
10/01 18:35, 20F
推
10/01 18:38, , 21F
10/01 18:38, 21F
感謝大家回應 :)
先回 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
→
10/08 09:29, , 22F
10/08 09:29, 22F
→
10/08 09:30, , 23F
10/08 09:30, 23F
→
10/08 09:31, , 24F
10/08 09:31, 24F
→
10/08 09:32, , 25F
10/08 09:32, 25F
→
10/08 09:32, , 26F
10/08 09:32, 26F