假设我有一个像这样的简单模型(一个相当大的应用程序的一小部分)
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; }
}
我想要一个简单的方法来获取给定EHR未被删除的physicalTests。
所以,我可以想到三种方法。
一个只是在我的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以包含一个只返回未删除的physsicalTests的方法。
类似
public class EHRRepository : IRepository<EHR>
{
//TODO: method that returns only the physsicalTests that arent deleted.
}
我仍在尝试掌握DDD的许多概念,我希望它尽可能纯净。
您会推荐哪种方法? 关于这样的话题的经验法则是什么?
请帮助。
答案 0 :(得分:0)
建议使用第一种方法,因为EHR是您的聚合根,它是有关其物理测试的信息专家。
第二种方法不相关,因为您已经有了模型,您可以将此方法添加到实体中。
仅当物理测试列表需要花费大量时间从数据库加载时,第三种方法才会更受欢迎,但仍然可以使用延迟加载但是如果要将获取与域分开,或者您不使用延迟加载然后ORM将其作为查询方法放在存储库中