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