2012-04-11 47 views
0

我試圖爲我們的企業應用程序創建一組模型。它從來沒有將它們與數據庫綁定得非常緊密。在這一點上,我試圖簡單地回答「是-A」還是「有-A」的問題。我是以DB結構爲基礎的,但我不想將它與此綁在一起。會員「是-A」人或人「有-A」註冊

對於初學者,我有一個非常明顯的Person模型,帶有典型的「Has-A」電話和地址。幾乎所有的人都可以使用該模型,並且是「Has-A」。

但是,我們有會員。在我們的DB/Current System中,會員是一個有登記的人。具體爲註冊的某種類型的註冊(,日期)。

一方面我覺得會員會繼承形式人爲一個「是-A」關係。然而,我對這種類型的東西很陌生,我想知道我是否過度思考它。我的人是否「有 - 一個」註冊或者是否意味着其他什麼?

這讓我想知道,如果我確實有會員,我應該爲預註冊,註冊,以前的註冊使用不同的「Is-A」模型嗎?看起來這更像是一個國家問題,但我再次強調這一點。如果這是一個關於國家的問題,我可以回到僅僅擁有一個「有-A」註冊的人員模型嗎?

我明白這是有點基於意見,我歡迎每個人對此的意見。

+0

招生聽起來像一個[關聯類](http://etutorials.org/Programming/UML/Chapter+6.+Class+圖表+高級+概念/協會+課程/)(特別是因爲你提到了幾個註冊 - 前,前等)。在這種情況下缺少的是什麼樣的招生(例如某種計劃?)。 – Fuhrmanator 2012-04-12 02:12:13

+0

@Fuhrmanator:這聽起來像你相信我的人員類「有一個」使用上述「關聯類」的註冊(s)與我有一個從我的Person類繼承的成員類...我想我同意。我將把這個概念應用到我的模型中,看看它的樣子。就像你的鏈接例子註冊有一個日期範圍,這使得這似乎是一個沒有道理的。 – 2012-04-12 16:37:26

+0

由於@Alex Burtsev在他的回答中提到的相同原因,Is-a對我來說沒有意義。 – Fuhrmanator 2012-04-12 17:11:21

回答

1

更有意義的是,人在等級上更高。從所有人羣中,你有一些成員,一些前成員和一些待成員。

如果你試圖用另一種方式來看待它,並且從所有成員的組中看,所有成員都是人......但有些人是被註銷的?這種方式的意義不大,因爲如果它們是Dis-Enrolled,那麼它們不再是成員。

除非是會員和註冊沒有連接(即,如果您可以被註銷並仍然是會員)。

+0

對你最後的陳述,不,儘管你可以在系統中擁有隻適用於會員的東西,即使你是一個Dis-Enrolled Member。這就是爲什麼它對我來說幾乎感覺像一個「國家」,但我知道自從我不得不首先提出要求之後,我知道了什麼。 – 2012-04-11 16:40:43

+0

對你的第一個陳述,也許我是誤解,但我也認爲人應該更高。我想要問的是,如果我的人有註冊,或者我應該有一個繼承註冊人的會員。此外,我想知道我是如何管理整個「國家」的事情。 這更有意義嗎? – 2012-04-11 16:43:33

+0

你當然知道!這是你的程序畢竟。幾個問題: 1)你可以有多個註冊? 2)你有多個會員資格嗎? 我不知道你將如何管理狀態,你可能應該首先確定你想要對會員/註冊進行的操作。 – 2012-04-11 18:37:39

0

那麼,我會盡力回答你的問題,雖然我不完全理解什麼是「註冊」(我不是母語英語的人)我想它是某種會員。

假設您決定使用IS-A關係,那麼您最終會得到: 成員:Person,VIPMember:Member,ExMember:Member等等。如果您將Person對象更改爲Member或其他其他?你將不得不把你的對象轉換爲這種類型,從Person對象創建一個成員對象副本值...這是很多樣板工作。

如果Object在創建後更改它,請使用某些屬性來區分它的類型。 Cosider蘋果:水果(蘋果永遠是水果,它不能成爲番茄),和CanceledOrder:訂單(訂單可以成爲CancledOrder,所以我寧願Order.State)。對於語言來說尤其如此,一旦對象被創建,你就不能改變它的類型(比如C#)。

至於你的情況下,從我的理解我會創造:

public class Person 
{ 
    public IEnumerable<Membership> Memberships {get;} 

    public bool IsMember 
    { 
     get 
     { 
      return Memberships.Any(); 
      //Or what ever logic you imply 
     } 
    } 
} 
相關問題