顧客和售貨員之間的關系說明了兩個問題。首先,在開發者看來,這是兩個真實的人之間所存在的一種關系。另一方面,它又表示了兩個程序對象之間的一種指向關系,或者說代表一種數據庫數據檢索,也可能是其他的什么。
當然這種關系未必那么直接。一對多的聚合關系未必就是一個對象含有另外一個對象的集合。也許只是從數據庫去查詢數據,然后實例化一些基于數據的東西。當然需要從中選擇一種機制才行。
在現實生活中,存在著很多的多對多關系,其中又有很多是雙向多對多關聯。這種關聯讓我們程序的實現變得相當復雜。其實,仔細想一想,這些復雜的多對多關系未必就是實用的。
現在有三種方式來簡化這種關系。
1、使用有向關聯。
2、使用限定詞。
3、除去那些不重要的關系。
應該盡可能的給程序中的關系加上一些限制。雙向關系總是意味著關聯的兩方互相依存。如果程序中不總是使用關聯的任意一方導航到另一方,那么為關聯添加方向性將會大大簡化設計以及對象之間的依賴關系。如果你真的深入到領域中,你就會了解到領域本身也含有這么一種傾向。
舉個例子來說。任何國家都會有領導人(總統)。這就是一種雙向關聯。但是在日常生活中我們往往不會這樣問:里根是哪個國家的總統?而是會這樣問:美國總統是誰?這就是領域本身的一種傾向。利用這種傾向,我們就可以簡化總統和國家之間的關系,簡化我們的設計。這代表著一種對于領域的深入理解。同時,也能讓更加泛化的類“人”來作為關聯對象之一。如下圖:
隨著我們對領域更加深入的理解,我們發現,除非非常時期,美國在一個時間階段內只有一個總統。這又給了我們一個契機。我們可以把國家-總統這種多對一關系轉化成為一種“一對一”關系(至少是有條件的多對一關系)。這同時也為我們的設計添加了一個重要規則。我們的程序可以應付諸如“誰是美國1970年總統”這樣的問題了。
如下圖:
實際上部分無向的多對多關系的簡化也更加突出了那些不能簡化的無向多對多關系。這也突出了我們領域中的一些重要關系所代表的一些重要概念。
終極的對關系的簡化就是除去關系,如果你認為這些關系對于領域而言不那么關鍵的話就可以這么做。
posted on 2007-09-11 22:15
littlegai 閱讀(237)
評論(0) 編輯 收藏 引用