我试图更好地理解领域驱动设计中的存储库模式。存储库模式实现的所有示例都仅处理实体。但是如果我只需要检索实体的某些部分怎么办?例如,我有具有大量属性的客户端实体。我可以在 ClientRepository 中定义这样的东西吗:
public IEnumerable<string> GetClientsNames() { ... }
of even:
class ClientBaseInfo //includes some subset of properties of Client entity
{
public string Name {get; set;}
public string Surname {get; set;}
public int Age {get; set;}
public string Email {get; set;}
}
....
public IEnumerable<ClientBaseInfo> GetClientsBaseInfo() { ... }
这种实现的原因是性能。无论如何,我认为我的代码会被这种“部分实体”污染。这种方法是否在现实项目中以某种方式使用?或者避免加载重型实体的唯一方法是拆分表及其相应的实体或其他什么?
EDIT:是的,我说的是 DTO 之类的东西。我怀疑存储库是否旨在处理此类对象,或者仅用于业务实体。我可以针对特定情况定义很多不同的 DTO,但是我的代码会变得太复杂吗?我没有答案,因为我没有足够的经验。我想知道有经验的人的意见。
对于此类查询,建议的方法是使用读取模型(CQRS 样式)。
因此,您可以实现一个非常薄的查询层,该查询层返回原始结构以满足您的目的。在 C# 世界中,我选择以下任何内容DataRow
to a DataTable
到 DTO(对于更复杂的结构)。
请记住,读取模型并不意味着最终一致性,并且您的查询端可以处于从同一表/数据库中的 100% 一致性到另一个数据库中的最终一致性的任何级别。
因此,这些类型的查询并不适合存储库模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)