推 NullLife: 我覺得用ORM來說 改field的時候 就相當於下DDL改column 09/27 20:27
→ NullLife: 名稱 也就等於你相關的SQL語句都必須修改 09/27 20:27
→ NullLife: 除非用mapping啦,以JPA來說就有annotation可以不耦合 09/27 20:29
→ 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
推 NullLife: SOGA 工具我是不曉得 但用Eclipse的時候 在字串那邊 09/27 20:46
→ NullLife: 就可以用ctrl點看看有無link 我覺得這已經夠方便了 XD 09/27 20:47
→ qrtt1: 覺得寫 unit test 才是比較好的方法。 09/27 20:51
→ wuliou: 我想你還是寫unit test吧 09/27 22:02
→ bitlife: 有陽春工具可解決本篇問題,但對寫在sql內的field/table名 09/28 10:28
→ bitlife: 稱修改就沒用,方法是把所有table及fields在coding時期從 09/28 10:28
→ bitlife: db讀出來,每個table做成一個以table name為名的class,然 09/28 10:29
→ bitlife: 後所有該table的欄位成為該對應class的final static字串 09/28 10:29
→ bitlife: 假設需要A表格的b欄位,程式就寫A.b 09/28 10:30
→ bitlife: 當table有變動,就重跑一次抓表格/欄位工具,哪裏編不過就 09/28 10:31
→ bitlife: 知道了 09/28 10:31
→ swpoker: 這種就只能執行時才能知道~所以unit test吧 09/30 10:16
→ marsyang1: generate-jpa-2-0-metamodel 10/01 18:33
→ marsyang1: 參考參考,我自己是用spring data,為了整合性使用quer 10/01 18:35
→ marsyang1: y dsl,但做法都差不多。 10/01 18:35
推 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
→ adrianshum: 我有想過用類似 Mockito 的做法寫Util 去 runtime 10/08 09:29
→ adrianshum: 生成 method name e.g.nameOf(c(Foo.class).method()) 10/08 09:30
→ adrianshum: 不過因為某些原因沒有動手做。可以考慮 10/08 09:31
→ adrianshum: 不過 property name/variable name 真的有點難搞 10/08 09:32
→ adrianshum: QueryDSL 應該是暫時最可行的做法了 10/08 09:32