我的域由两个类组成。第一个是病人。二是注入。Person 可以有许多注入实例。
这引发了一些 OOD、关系数据库设计和 ORM(特别是 EntityFramework)的架构问题:
我希望 Patient 将持有 injections 属性列表,并且 Injection 将持有 Patient 属性。这看起来像是一个很好的面向对象设计。
这种设计(首先使用 EntityFramework 代码)将映射到两个表:Patients 表和 Injections 表。Injections 表将有一个外键指向患者表中的一行。
到目前为止,一切都很好。
现在,让我们假设一个如上所述的数据库案例,其中 1 名患者进行了 100,000 次注射。
当我为该患者询问 DbContext 时,它将检索患者数据,并且注射列表将仅按需求加载。
这看起来像是一个潜在的问题。我对 Patient 的任何潜在用户说 - “嘿,你有一个注射列表,使用它们!只做 - myPatient.Injections,它们会神奇地出现”。
但是,通过公开此属性,我可能会使患者用户运行非常繁重的查询,这甚至可能不是应用程序的需要。
一种可能的解决方案是从患者类中删除注射列表。关于数据库,映射将保持不变,为了查询患者的注射情况,我将使用具体服务。但是现在我有一个 Patient 类,它不能很好地代表我的领域。
另一种可能的解决方案是将 EF 上下文返回的每个对象映射到另一个浅对象。我只会映射我需要的东西,不会向用户公开不需要的数据。这种方法将导致重复和类之间映射的维护。
你怎么看这个问题?
分享你的知识:)