混亂

1

說我有這樣的一個簡單的模型(一個相當大的應用程序的一小部分)混亂

public class EHR : IEntity 
     { 
      public int ID { get; set; }   
      public string UserName { get; set; } 
      public DateTime CreationDate { get; set; } 
      public virtual ICollection<PhysicalTest> PhysicalTests { get; set; } 
     } 

public class PhysicalTest : IEntity 
     {  
     public int ID { get; set; }  
     public virtual EHR Ehr { get; set; } 
     public Boolean IsDeleted { get; set; } 
     } 

,我想一個簡單的方法來獲得未刪除的physicalTests對於給定的EHR。

所以,我可以想到三種方法來做到這一點。

一個簡單的添加到我的EHR類的方法。(它似乎是一個壞主意,因爲我不想從anemic domain model遭受)

public IEnumerable<PhysicalTest> ActivePhysicalTests() 
{ 
return this.PhysicalTests.Where(!m=>m.IsDeleted).ToList(); 
} 

另一種是 下創建一個擴展方法一個EHRRepositoryExtensions類:

public static class EHRRepositoryExtensions 
    { 
     public static IEnumerable<PhysicalTest> Active(this IEnumerable<PhysicalTest> physicalTests) 
     { 
      return physicalTests.Where(test => !test.IsDeleted).OrderByDescending(test => test.CreationDate).ToList(); 
     } 
} 

我也認爲我可以延長我的IRepository包括僅返回的arent刪除physsicalTests的方法。

pubic class EHRRepository : IRepository<EHR> 
{ 
//TODO: method that returns only the physsicalTests that arent deleted. 
} 

我仍然試圖掌握在DDD的很多概念,我希望它是純越好。

您會推薦哪種方法? 什麼是這樣的主題的經驗法則?

請幫忙。

+0

不應該返回this.PhysicalTests.Where(!m => m.IsDeleted).ToList();返回this.PhysicalTests.Where(m =>!m.IsDeleted).ToList(); NOT被錯誤放置。 –

回答

0

建議使用第一種方法,因爲EHR是您的聚合根,它是有關其物理測試的信息專家。

第二種方法是不相關的,因爲您已經有模型,您可以將此方法添加到實體中。

只有在物理測試列表花費很多時間從數據庫加載時,仍然可以使用第三種方法,但仍然可以使用延遲加載,但是如果要將提取與域分開,或者不使用延遲加載啓用ORM然後把它作爲查詢方法在存儲庫中