OO和SQL,應該攜手共進

lgx522發表於2008-07-03
最近兩年來,經常在OO和SQL這兩兄弟陣營裡轉來轉去,總想做出個“決斷”,結果卻是誰也捨不得,手心手背都是肉啊。

十年前學應用開發的時候,SQL是絕對的王者,一直也就用了好幾年,搞定了不少事情。有時候也覺著煩,尤其是許多不相干的呼叫程式碼,羅羅嗦嗦貼上個沒完。這時候總是想,能不能輕鬆點啊。

這時,以Hibernate為代表的ORM流行起來了,筆者也就興沖沖地投入到實踐當中。四五年前已經可以很舒服地配合Spring的 Hibernate Template寫程式碼了,那是相當地省事啊。雖然Hibernate也不是盞省油的燈,費了不少學習和除錯的時間(老實說筆者到現在也算不上精通),好在以OO方式寫應用,邏輯程式碼清晰多了,結構化進一步提高,也算值了。這時候又在想,還能不能更輕鬆點啊。

而這時,RoR火了起來。筆者在一年半前一接觸,立馬就迷上了Active Record,以前多少煩惱似乎瞬間煙銷雲散了,實在是非常的爽快!這個階段,筆者已經徹底成為OO的迷信者,言必OO,並且深信以AR為代表的DSL是企業應用的最佳解決方案。

整好這時碰到一些傳統C/S轉B/S的企業應用專案,筆者滿以為可以輕鬆搞定,結果卻是出人意料,竟然被這些專案當頭打了一棒。由於傳統企業應用是以寫為主的OLTP,並混合了部分查詢相當複雜的OLAP,效能要求還是比較高的,ORM很快就敗下陣來。很多時候甚至逼迫筆者重拾SQL,這時候兩難的境地出現了:一邊是清晰的OO,一邊是高效的SQL;普通CRUD是OO的強項,而複雜的查詢統計則又是SQL的天賦。筆者於是無奈地在這兩個陣營裡轉來轉去,一面到各個技術站點尋求“真理”。可惜這年頭,以SQL為代表的傳統陣營和以OO為代表的新生陣營有些“水火不相容”的味道,正是“人也多嘴也多講不清道理”。尋求得越多,也就疑惑得越多。自己也參與併發起過一些爭論,結果愈發雲山霧水。

工作生活疲累之餘,信手翻翻十多年前一度熱衷的儒釋道經典,這才猛然間有了“不識廬山真面目,只緣身在此身中”的覺悟。答案其實已經在筆者實踐的“無奈”當中。由此可見古人“相容幷包”的睿智。
正所謂OO和SQL,本是同根生,相煎何太急。與其爭論誰比誰更高更強,不如共同攜手解決現實問題。

在此原則下,筆者對專案中SQL不爽的部分改用OO,OO不適合的地方沿用SQL,終於達到了很好的平衡。
於是,曾經深信而後懷疑否定的的AR,攜手SQL老大哥,相當痛快地解決了大部分企業應用問題。
對立並非正途,合作才是王道,這個道理在程式碼領域同樣成立。

相關文章