2011-11-23 36 views
4

我目前在攻讀計算機工程專業,我記得一個名爲Introduction to Informational Systems的類的教授說,以1:1基數相關的兩個類沒有意義。以1:1基數關聯兩個類是否有意義?

例如:我有Client類和Telephone類。我們假設客戶端只能有一部手機。教授說,創建Telephone class沒有意義,電話應該是Client類的一個屬性。我完全同意他的看法。

但是現在我正在參加軟件工程課程,教授(不一樣)沒有對這個問題發表任何評論,現在我對此非常困惑。

什麼是正確的方法?

回答

3

我會說你的信息系統教授介紹是正確的。還有你的SE教授(假設他缺乏評論使他成爲逆向投資者)。根據您的要求和您正在使用的域,它們都是正確的。但沒有任何其他細節,很難爲你模擬這一點,我會傾向於你的CE教授所說的。記住你學到的所有有趣的小原則:KISS,DRY等,並將它們應用於你的問題。

如果Client將永遠不可能有多個電話號碼,並且您的域中沒有其他實體需要電話號碼,那麼不需要單獨的Telephone類。在現實世界中,如果您的要求很模糊,請從您的客戶那裏瞭解更多信息。

如果有人在路上決定Client s可以接受多個電話號碼,或者其他實體被引入到您的域中需要電話號碼,這是一個相當容易的重構來完成。

因此,考慮到這一點,假設您的Client有一個單獨的Address類,其中包含電話號碼。也許Address課程被其他課程重新使用,可能是InvoiceShipment,其中Address可以在兩種情況下共享或應用。在這個例子中,你可能想要AddressTelephone)是它自己的類。

在你的例子中,Telephone可能有點太設計了。如果它有很多屬性(AreaCode,InternationalPrefix,Number等),但是如果Client只需要一個名爲Telephone的字符串值,那麼用戶只需鍵入以下內容即可重用:參考,那麼它可能沒有意義成爲它自己的類。

2

如果您希望重新使用Telephone類,將它作爲Client類的一部分將不會很有用。這將是一個非常好的理由。如果您將其留在Client課程中,這意味着即使您在其他地方使用它,它本質上也是Client的一部分,我懷疑您的意思。

有時候,將具有1:1關係的2個實體建模爲單獨的類是有意義的。也許你有一個Client,你也有ClientBilling。您不希望所有的程序員都能訪問ClientBilling,因此您可以將其移動到自己的類中,並可以單獨進行控制。

也許你的結構是巨大的,運輸整個事情通常是不必要的。通過將其分解爲功能塊,您可以將數據的大小減小到僅用於特定功能所需的大小。

也許1:1不一定是數據的固有內容,合理的猜測是它並不總是那樣。遊覽Telephone例子屬於這個類別,我認爲。

0

我會說1:1的關係(兩端都是強制性的)是可疑的,應該仔細考慮以確保它們是必需的。通常它是圖的靈活性和簡單性之間的折衷(靈活性,因爲如果將這兩個類保持在簡單的維護一個類而不是兩個類的情況下,將來可以更容易地改變圖並適應新的要求)

相關問題