混乱

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然后把它作为查询方法在存储库中