我正在尝试更好地理解领域驱动设计中的存储库模式。存储库模式实现的所有示例都只处理实体。但是如果我只需要检索实体的一部分怎么办?例如,我有具有大量属性的客户实体。我可以在 ClientRepository 中定义这样的东西吗:
public IEnumerable<string> GetClientsNames() { ... }
甚至:
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() { ... }
这样实现的原因是性能。无论如何,我认为我的代码会被这种“部分实体”污染。这种方法是否以某种方式用于现实生活中的项目中?或者避免加载繁重实体的唯一方法是拆分表及其对应的实体或其他东西?
编辑:是的,我说的是像 DTO 这样的东西。我怀疑存储库是否旨在处理此类对象,或者它仅适用于业务实体。我可以为特定情况定义很多不同的 DTO,但是我的代码会不会变得太复杂了?我没有答案,因为我没有足够的经验。我想知道有经验的人的意见。
最佳答案
对于这些类型的查询,建议的方法是使用读取模型(CQRS 样式)。
因此,您可以实现一个非常薄的查询层,该查询层返回一个原始结构,以满足您的目的。在 c# 世界中,我选择从 DataRow
到 DataTable
再到 DTO(对于更复杂的结构)的任何东西。
请记住,读取模型并不意味着最终一致性,您的查询端可以处于任何级别,从同一表/数据库中的 100% 一致性到另一个数据库中的最终一致性。
所以这些类型的查询不适合存储库模式。
关于c# - 存储库模式可以用于加载 "partial entities",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24898053/