2009-06-26 32 views
1

我的名字是艾德森,在這一刻我有一些關於作品表現的問題。在這個模型 我有一個簡單的用戶庫departmentbase。用戶庫具有類型deparmentbase的屬性,而departmentbase具有類型爲departmentbase的列表屬性。 當我有一個用戶基的實例在這一刻加載關於部門的信息,但然後DepartmentBase也加載有關部門的信息!我該如何處理作品與作品

現在,當我有一個所有用戶的用戶羣列表,再次爲所有用戶加載過程,這是一個很好的做法或什麼是更好的形式?

alt text http://img146.imageshack.us/img146/3949/diagram.jpg

回答

3

我不知道它是否是一種更好的(或者甚至是適用的)方法,但我有時會製作我用於從其他對象引用的對象的簡短版本。 breif版本充當對象完整版本的基類,並且通常包含在這些對象的列表中可見的信息。它通常不包含其他對象的列表,任何對其他類的引用通常都會引用該類的簡要版本。這消除了一些不必要的數據加載,以及一些循環引用的情況。例如:

public class DepartmentBrief 
{ 
    public string Name { get; set; } 
} 
public class Department : DepartmentBrief 
{ 
    public Department() 
    { 
     Departments = new List<DepartmentBrief>(); 
    } 
    public IEnumerable<DepartmentBrief> Departments { get; private set; } 
} 
public class UserBase 
{ 
    public DepartmentBrief Department { get; set; } 
} 

這種方法和具有完全對象引用與延遲加載配對的一個區別是您需要在需要時顯式加載額外的數據。如果您有一個UserBase實例,並且您需要該UserBaseDepartment中的部門列表,則需要編寫一些代碼來獲取對象 UserBase中的對象正在識別的對象。這可能被認爲是一個缺點,但我個人喜歡這樣一個事實,即在準確地查看代碼到達數據存儲區時,它會很清楚。

+0

如果您通過其基類(DepartmentBrief)訪問Department的實例,它仍然是內存中的Department。所以在你需要訪問這個列表的時候,你必須先施放(這沒有任何意義)。使用接口(或基類)是可以的,但是如果部門列表是每個部門都有的,那麼它應該包含在該接口中。我不明白如何鑄造可以在性能上有所作爲。 – Groo 2009-06-26 08:31:10

2

這取決於,如果你需要的所有部門的數據直接加載用戶列表後,那麼這是最好的辦法。如果您不立即需要,則最好使用lazy loading作爲部門數據。這意味着您推遲加載部門數據,直到調用明確的方法(或屬性)。

+0

謝謝fretje我不知道。 – Rangel 2009-06-26 08:31:04