2008年4月22日 星期二

OOA範例:組織架構的樣式

這裡用Martin Fowler的組織架構樣式為範例,說明OOA的威力。本文中難免有說明不清楚的地方,建議還是閱讀Fowler的原文會有完整的說明以及程式碼範例。

組織架構是各式企業應用軟體常遇到的問題。要用物件模型表達樹狀的組織架構關係,例如一個公司分成幾個處(Division),每個處底下又分部門(Department),部門下有成員(Person)。最直覺的模型如下:

模型一:靜態模型
模型二:階層(hierarchy)

換個角度想,"處"跟"部"有很多共同的屬性。我們可以將它抽象化,稱為組織Organization。Division跟Department兩個類別都繼承Organization。Organization的上級單位稱為parent。

在很多時候,組織跟個人有共同的屬性。例如你的電話簿上,一定同時有一些人的電話地址,也有一些機構的電話地址。我們可以把人跟組織上面再定一個父類別,稱為Party。我們可以再加一些彈性到這個模型。將parent上移給Party。就變成一個強大而靈活的模型,不只完全取代模型一,同時還容許複雜的n級的組織架構。一個人可以屬於某個組織,一整個組織也可以歸某個人管轄。
模型三:信任關係(accountability)(To do:讀者反應需要補強說明)
如果我們不只有一組從屬關係,例如矩陣式管理,就有兩套從屬關係。這時候我們只要增加另一條parent關係就解決了:

但是如果有更多的這類關係要處理,或者是組織架構常常變動,我們會需要很多條parent,或者甚至於parent關係需要動態產生。這時候這個架構又不夠強了。這時我們要引用一個物件模型的原則,就是

當物件間的連結很重要時,就將這個連結本身抽象化為一個類別。
將模型二的parent抽出來變成一個類別,稱為Accountability。得到這個模型。

要注意的是,不一定最強大的模型就是最好的,強大的模型有時不容易實做。,以上只是很快速的舉例說明,在Fowler的原文中有詳細說明。

沒有留言: