2012年10月13日 星期六

如何在 Grails 上透過 GORM 實現多對多的關係。(一) 測試先行

當我完成 GORM 多對多的測試時,真的覺得很酷。坦白說,我是SQL 派的人,物件導向的Query Language 背後其實沒啥效率,不管是新增或是刪除常常多做了幾筆SQL。在複雜的程式中,其實直接透過SQL 來達成任務,在效能上是比較能接受的。

不過反過來思考,多對多的維護功能其實很常見。如果一直在程式中SQL 來SQL 去的,「程式的可讀性」會大大的降低。Hibernate出現後,程式員透過物件的方式來操作資料庫,反倒成了顯學。這邊的爭論可以寫在另外一篇文章了。

這顯學蔚然成風,但我畢竟是散淡的人,多寫幾個字總覺得麻煩,但是又無處可去。

Grails 的做法非常的另人驚艷。
不講理論,先講結果,當多對多完成的時候,我可以怎樣去得到我要的東西?
首先我們的  domain class 為 LoginUsers 和 Roles。
這個很單純,就是一個使用者可以加入多個群組,而一個群組裡也可以包含多個使用者。
Grails 講的是結果。所以你想怎麼做,可以先寫在「整合測試」中。
寫在整合測試,在跑的時候,就有db連線的功能。

整合測試

我以前一直不太懂,先寫測試有什麼好處。在傳統 Java 開發中已經夠慢了,想到要寫測試就頭大。但後來終於理解「測試先行」的意思了。

那就是先決定「我就是要這樣呼叫」。
而後再把程式的肉慢慢做出來。

這樣的差別在於,你若是「呼叫」的人,一定是想寫最少的程式來得到你要的結果。而這樣的導向,會讓程式易於理解。若先寫類別與方法,寫完了有時候發現外部程式呼叫起來很不順,這也是因為沒有從別人的觀點來開始的原因。

不過我們不是要講整合測試

不囉嗦,開始寫我們想要的呼叫方式。請看下一篇。




沒有留言:

張貼留言