2011-10-22 55 views
0

這個問題可能看起來很瑣碎,但我還是想從你們那裏聽到..DTO一流的設計和關係數據模型

當我設計我的DTO類,我需要遵循同樣的關係層次結構我用於設計我的關係數據模型(數據庫)?特別是當你有一對一的關係。

例如:假設我們有兩個表Employee和Location,關係基數是1:1。 (一對一)。

員工{FName參數,LName的,電話,LocationId} 位置{LOCNAME,省,國家}

我應該創建2級爲每個表或我應該合併所有財產到一個單一的DTO類?可以說,我的業務需求是,我需要返回員工和他們的LocName,其中不需要州和國家。

我需要您的意見。

根據我的經驗,我的理解是DTO根據服務要求更加普遍化,不應該與關係數據模型耦合,尤其是對於1對1關係。

回答

0

您不需要遵循完全相同的模型。當您使用對象表示對其進行建模時,將無法將其完全轉換爲與數據庫中的相同。

  • 一對一 - 在這種情況下,你有一個問題一樣,是一個實體的其他的特殊化?如果是的話,你可以用繼承來表示它。如果沒有,您可以爲每一個實現特定的類並相互引用,或者如果相關實體是第一個實體(第一個實體的組成)的一部分,則可以合併它。假設你有一個實體另一個學生和另一個教授,在您的數據庫剛剛決定,因爲有兩個實體(教授和學生),這意味着之間的層次之間是共同的領域模型中來實現部分。在這種情況下,你可以按照OO同樣的規則,一類爲(這將是抽象的,如果意圖是子類的抽象的共同特點),另一個用於學生即會延長和另一個用於教授,將延伸。在你的情況下,你評論了Employee和Address,如果這個關係是一對一的,那麼它可以合併,這意味着你將擁有一個對象:Employee {FName,LName,Phone,LocName,State,Country}或者你可以代表它有兩個實體,而是引用彼此,如:員工{FName參數,LName的,電話,地點}位置{員工,LOCNAME,省,國家}

  • 一對多 - 基本上有3種方式來表示它,而決定使用哪一個是定義物體之間的可導航性如何。如果您的適航性需要是:

    只是由一種到多種
    • - 你將不得不在許多部分的關係,並沒有任何的一個部分一個集合;
    • 剛剛從多對一 - 你將不得不在許多部分引用一個實例的屬性;
    • 雙方 - 你將有兩個(對許多部分財產,並在一個部分的集合)。
  • 多對多 - 在這種情況下,你將有關係的每一側基本上一個集合。例如:用戶權限,你有一個用戶對象持有權限的集合,並在另一邊你有權限控股用戶的集合。

從OO另一個好處是,你不會被強迫,同時實施一些使用IDS。假設你從數據庫中檢索了一個僱員。此員工需要翻譯成對象圖,在這種情況下,員工可以持有地址引用,這意味着您不需要知道該員工地址中的ID,因爲您擁有可從其訪問的地址對象。

+0

感謝您的意見。即使我的理解是,當你提供業務服務接口時,返回的DTO類設計應該這樣做,它應該對你的關係數據模型保持中立。那就是當你得到更多的控制時,尤其是當有一對一的關係時。我同意一對多的關係設計更多地基於像懶加載等獲取約束。 – Chetan