2013-05-08 75 views
0

好吧,對於一個基本的例子說,我有一個應用程序的開支,我的SQL數據庫中的每個開支都有一個Id,Employee Id和Amount。我應該這樣做:將複雜對象作爲類成員處理的最佳做法是什麼?

public class Expense 
{ 
    public int Id { get; set; } 
    public Employee Employee { get; set; } 
    public decimal Amount { get; set; } 
} 

或本:

public class Expense 
{ 
    public int Id { get; set; } 
    public int EmployeeId { get; set; } 
    public decimal Amount { get; set; } 
} 

你看,我通常會做的第一,當我從數據庫中獲取的費用我會通過調用像一個構造函數中設置僱員場:Employee = new Employee(int id)然後,這將再次訪問數據庫以完成Employee對象中的成員。這很方便,因爲現在我可以通過費用訪問員工成員/職能.. I.E.如果我綁定爲一個ObjectDataSource,我可以顯示類似Eval("Employee.Name")的東西,並顯示更友好的東西,然後只是一個數字,因爲它存儲在數據庫中。

但是,我正在處理的當前項目可能會運行數千行的數十行,並且如果我要獲取第一個費用詳細信息,然後獲取每個對象的員工詳細信息,那麼數據庫請求的數量就會飛速增長。 (事實上​​我目前的項目有一個6-7外鍵的表)。

有沒有辦法讓我的蛋糕吃呢?

也許通過只有Id字段的接口類而不是完整的對象字段?但我覺得我從來沒有完全理解接口,所以我不確定這是否會有所作爲。

感謝任何讀過這些的人,即使您對我沒有任何答案。

+2

看起來像使用LazyLoading的對象關係框架非常接近'兩全其美'。 – 2013-05-08 17:46:48

回答

3

這取決於:如果您使用的功能豐富的ORM(NHibernate)可以乾淨地處理關係等事情,那麼第一個代碼會更方便;或者如果這些是您的View Model對象,則可以將此任務委託給一個DI引擎(如Ninject)。

如果你的應用程序的設計需要更多的控制對象來來去去,或者如果你大量使用費用(不是員工),你應該使用第二個設計(當然,即NHibernate有一個複雜的緩存工具箱,可以用來實現這一點)。

0

在我看來,你的第二個例子不會阻止你在數據集中獲得費用和員工。另一方面,我想你可以爲一個empoyee花費很多費用,所以如果你花費1000個與100名僱員相關的費用,那麼你就有1000個員工對象在浮動,其中900個是靜態的。如何在類中表示它們並不一定會改變在數據庫中表示它們的方式。

相關問題