March 25, 2006

健素糖與物件導向設計

又是奇怪的標題。

下午散步返家後,閱讀了 Etude 的文章,覺得很有意思,引用如下:
    作者 Etude (o/~)
    標題 OOOO
    時間 Sun Mar 19 17:26:37 2006
    ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
    想學習如何寫出超爛的 OO 程式的,可以去 trace Apache derby 的程式碼: http://db.apache.org/derby/ , 這個 relational database implementation 把 OOOO (註) design pattern 發揮到極至。

    幾十萬行的 java 程式碼裡到處充斥著各種職權劃分不清的 XXXXFactory、XXXXController、XXXXManager... 想建立、使用任何一個物件都麻煩得要死。

    明明使用了 OO 卻仍然在執行期用字串拙劣地操作物件的生成和型別判斷。自己發明新的 database jargon 卻不說清楚它的邏輯和實作意義。XXXX class 的註解不寫在 XXXX.java 裡,卻散見於各種直接間接、或遠或近相關的其他 YYYY.java 裡。

    相比起來,Weka 的程式碼真是既簡單又優雅。

    derby 的文件也沒什麼鳥用。我為了深入了解這些程式碼以進行修改的工程,跑去他們 forum 東找西找,找到之前也有人希望有文件解說 derby 的架構。結果居然有個人回說: 他喜歡把程式本身當成程式的說明與軟體的 spec, 於 是 derby 不需要有另外的文件來說明架構與實作細節。另外還有人提到:
      Derby 實作是很好的 design pattern 練習。
    XXXX class 的註解不寫在 XXXX.java 裡,卻散見於各種直接間接、或遠或近真是笑死人,這種大便碼是要怎樣當成自己的註解?他還以為他寫出來的程式和 Martin Fowler、Kent Beck 等人一樣好。

    (註) Obsessive-Object-Orientation Obliquity
這讓我想起小時候吃的健素糖,外觀很類似M&M巧克力,Object-Oriented 就像糖衣,可以適度包裝軟體,所以,對我這個不明究理的人來說,含入口中的健素糖與M&M巧克力都給我一種幸福的甜蜜滋味,不過呢,過一段時間後,富含酵素的健素糖就產生很特別的味道。蔡學鏞在 [Obsessive-Object-Orientation Obliquity] 一文提到的 OOO 就是濫用物件導向的一種「病症」,健素糖本來就是一系列酵素的萃取物,而糖果似乎都該是甜的,為了 OO 而 OO、為了糖果而加糖,的確是有問題的行徑,雖然適度操作可帶來正面的成效。
由 jserv 發表於 March 25, 2006 03:30 PM
迴響

雖然蔡學鏞說swing完全沒有OOOO的問題,我是每天摸索swing的人,我認為swing是沒有設計上得問題,但是實作上很有問題,萬惡的EDT就是如此。
設計絕對不是萬能的,尤其是OO,對我來說,每次查swing的程式,總是一堆Factory, 一堆繼承才找的到。

M 發表於 March 27, 2006 10:06 AM