2009-11-13 80 views
1

設計ORM時,表現關係的最佳方法是什麼?我的意思是,在以下兩種情況下,哪種方法最好考慮性能?在設計ORM時,表現關係的最佳方法是什麼?

class Employee 
{ 
    int ID { get; set; } 

    String Name { get; set; } 

    int DepartmentID { get; set; } //This approach uses DepartmentID 
} 

--- OR ---

class Employee 
{ 
    int ID { get; set; } 

    String Name { get; set; } 

    Department Department { get; set; } //This approach uses Department class 
} 

從我的角度來看,第二種方法是很好的。它也是面向對象的。這應該是ORM的主要目的;將關係從RDBMS轉換爲面向對象。但是這樣做,即使不需要,我們也需要將整個Department對象加載到一個員工中。

在您看來,您應該如何表達或應該採取哪種最佳方法?

回答

3

大多數ORM框架將處理與第一種情況等效的第二種情況。以Hibernate爲參考例子,他們會毫不含糊地告訴您永遠不會做第一個選項。實際上,他們對此很嗤之以鼻。

事實上,我認爲第一個選項在技術上不會被視爲ORM,因爲關係是在您的OOP代碼中的ID級別處理的。 Hibernate(與大多數其他人一樣)具有延遲加載,這意味着您可以加載您的Employee並且它不會獲取Department。但是,如果你說employee.getDepartment(),它會在那時執行簡單的select語句來獲取部門數據。

這也恰好可以在映射時間或查詢時間進行配置,所以如果您有一些用戶知道需要部門的用例,則可以通過告訴它將Employee和Department一個連接查詢。

查看Hibernate的"Small Primer on Fetch Strategies"瞭解更多信息。

1

這並不是性能上的差異,實際上它只是一個比另一個更容易實現。

2

你忘記了相關的項目可以加載懶惰。

也就是說,創建Employee對象時,不必填充Department字段。當調用get訪問器時可以填充這個值。

相關問題