2010-10-20 65 views
0

對不起,如果這是不好的,但我是新的發展,並教我自己。應該類結構鏡像數據庫結構?

比方說,我有2個表

生物數據
名稱(字符串)
生日(日期時間)
血型(INT)

血型
BloodTypeId(INT)
BloodTypeName(字符串)

當我拉出一條記錄時,我將使用一個連接,以便我拔出BloodTypeName而不僅僅是ID。現在

,應我的階級結構鏡子這些表,還是我的安全建立一個「人」類

public class Person { 
    string Name; 
    DateTime Birthdate; 
    string BloodType; 
} 

如果我做如上所示打造一流的,看來我不得不當涉及到通過數據庫插入記錄時做一些funkiness,因爲我想向用戶顯示BloodTypeName,但我必須將相關的整數插入到數據庫中。

任何有關最佳實踐的見解將不勝感激。

回答

2

不,它絕對不應該鏡像數據庫結構,如果你有什麼好的理由不去的話。

有時數據類會精確地鏡像數據庫,但這不是因爲它們必須相同,而是因爲沒有理由使它們與衆不同。使類對數據庫進行鏡像可以獲得更簡單的數據層,但只要有不同的類建模的理由,就應該考慮鏡像數據庫是否會導致難以使用這些類。

在這種情況下,如果您必須在單獨的操作中獲取血型名稱,則效率顯然較低。除了人類以外,您可能還需要一個血型類(例如,如果您想填充所有可能血型的下拉列表),但是當您獲取人物對象的數據時,您還應該獲取血型名稱。

或者,你可以與人的數據一起取血型的兩個ID和名稱,並創建一個血型對象在人物對象存儲:

public class BloodType { 
    int Id; 
    string Name; 
} 

public class Person { 
    string Name; 
    DateTime Birthdate; 
    BloodType BloodType; 
} 
+0

所以看起來在這個情況下,鏡像db結構更有效。 – andrewheins 2010-10-21 00:14:29

+0

@andrewheins:這取決於你將如何使用這些類。如果沒有理由擁有單獨的血型課程,那麼不應該僅僅因爲數據庫看起來這樣才創建一個。 – Guffa 2010-10-21 00:18:39

0

我會分開顯示類和數據類。

數據類必須具有數據庫中的任何和所有信息才能夠對其進行更改。現在,如果您想向用戶顯示特定信息,則可以編寫顯示只包含所需特定信息的類。然後你簡單地映射它們 - 無論是你自己還是通過使用庫,如automapper,我自己使用它,它非常方便,並且需要肩膀上的工作量很大。

0

我假設您正在爲您的數據庫使用RDBMS系統,並且您將爲您的類結構使用OOP方法。如果你堅持這兩種方法的核心原則,你會沒事的。

沒有必要混合這些方法。所以=>不要鏡像這些結構。你很好地構建一個Person類。

-1

乾草安德魯.. 是的,它應該反映數據庫結構,

如果你仍然在學習,你就可以開始閱讀有關LINQ技術,幾乎做最則是問有關工作的事情,希望在 Regards ..