(一)對象之間的關(guān)系:
1. 依賴:
依賴對象通過調(diào)用被依賴對象的方法來獲得服務(wù)。一種比較松散的關(guān)系,并且是短期的。我們的過程與對象往往依賴與我們的實體域?qū)ο蟆H缭趕truts 的 action中調(diào)用模型層的方法。
2. 關(guān)聯(lián)
它使一個類指到另一個類的屬性。長期的
3. 聚合
聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強的關(guān)聯(lián)關(guān)系。聚合是整體和部分之間的關(guān)系。
4. 組合
也叫合成關(guān)系,組成關(guān)系是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系強的關(guān)系。對象負(fù)責(zé)代表部分的對象的生命周期。
注:既然聚合,組合關(guān)系屬于關(guān)聯(lián)關(guān)系,那么如何區(qū)分一般關(guān)聯(lián)關(guān)系,聚合關(guān)系和組合關(guān)系呢?
一般關(guān)聯(lián):只要一個對象聯(lián)系到另外一個對象就形成了關(guān)聯(lián)關(guān)系。如:人和他的貓,黑豹樂隊和竇魏,pc機(jī)和顯示器。
聚合關(guān)系:一種強關(guān)聯(lián)關(guān)系,它要求有部分和整體的關(guān)系,并且沒有了整體部分也可以獨立存在。在上面三個例子中人和它的貓顯然沒有部分和整體的關(guān)系,所以只能是一般的關(guān)聯(lián)關(guān)系。而黑豹樂隊和竇魏,竇魏等人組成了黑豹樂隊即:竇魏和黑豹是整體和部分的關(guān)系。而
竇魏脫離了黑豹(早就離開了)更或者黑豹不存在了那么竇魏仍然可以以音樂人的身份存在(即對象仍然可以獨立存在)所以它屬于聚合關(guān)系。組成關(guān)系是可以共享的。(竇魏也可以加入其他樂隊)。
組合關(guān)系:一種更強的整體和部分的關(guān)系。它并且要求代表整體的對象負(fù)責(zé)代表部分的對象的生命周期,組成關(guān)系是不能共享的。如:pc機(jī)和顯示器的關(guān)系。
我覺得:如果兩個實體是整體和部分的關(guān)系,那么它們到底是聚合還是組合,這取決于你的需求。比如說:pc機(jī)和顯示器的關(guān)系,如果你的系統(tǒng)中,顯示器脫離了 pc機(jī)就不存在意義了,也可以說:所有顯示器的訪問都是通過pc機(jī)進(jìn)行的,那么你可以把關(guān)系設(shè)定為組合(如你在為一個只買品牌機(jī)的代理商作系統(tǒng)你可能是可以這么作的)。如果你的顯示器脫離的pc機(jī)仍然可以獨立存在,也就是說在系統(tǒng)中可以直接訪問顯示器對象,那么你可以將關(guān)系設(shè)為聚合(如你在為一個買散件的代理商作系統(tǒng)你可能是可以這么作的)
5. 繼承
這個我不想多講了,用過面向?qū)ο蟮恼Z言都應(yīng)該知道。
(二)關(guān)系數(shù)據(jù)庫的關(guān)系
一對一
一對多
多對一
多對多
(三)o/r mapping策略
1.繼承:
對于繼承關(guān)系一般有三種策略:
策略1繼承樹的每個類對應(yīng)一個表<joined-subclass >
共享主鍵
策略2繼承樹的根類對應(yīng)一個表<discriminator ><subclass >
需要添加一個識別字段
策略3繼承樹的葉子類對應(yīng)一個表
不支持多態(tài)查詢
2.關(guān)聯(lián)
2.1一對一
一半有兩種策略:
策略1:唯一的外鍵
<many-to-one>+unique=”true” (唯一的外鍵)
<one-to-one>
策略2:共享主鍵
<one-to-one>
<one-to-one><constrained=”true”> (既是主鍵又是外鍵)
注意:生成方式需要用:foreign
2.2一對多(無需多說)
2.3多對一(無需多說)
2.4多對多
策略1:A,B表多對多的關(guān)系需要引入C表。
C表中的所有屬性即為主鍵又為外鍵分別參照A,B兩表。
C表中不可以有其他屬性
策略2:將多對多拆分成兩個一對多:
A,B對象多對多的關(guān)系需要引入C對象。使得A,B兩對象與C對象的關(guān)系為一對多。對應(yīng)數(shù)據(jù)庫中:A,B表多對多的關(guān)系需要引入C表。A,B兩表與C表的關(guān)系為一對多。
C表又自己的主鍵
C表中又非主鍵的外鍵分別參照A,B兩表。
C表中不可以有其他屬性
如;學(xué)生 ,課程為多對多的關(guān)系 那么引入學(xué)生選課。
注意:策略1和策略2的不同在于:策略2引入了新的對象而策略1沒有。這是因為這樣:策略1的c表不能又自己的東西。而策略2有。
2.5其他
上面說過:聚合與組成是關(guān)聯(lián)的一種所以他們也符合以上策略。
特別的:當(dāng)用到組合關(guān)系的是否我們可用用到hibernate的“組件”<component>.由于“組件”它完全可以滿足組成關(guān)系的強關(guān)聯(lián)。
3.依賴
一般不在實體域?qū)ο笾畜w現(xiàn)。
|