【问题标题】:Optimizing query vs decreasing modelling quality优化查询与降低建模质量
【发布时间】:2017-11-23 20:17:14
【问题描述】:

我必须提供用户所属的团队和成员信息。 这是一个多对多的关系,所以我有一个包含成员信息的team_user,例如role_typeinvited_at。 我得到了一个team 表,其中包含有关团队本身的信息,例如namedescription

现在我有两种方法可以通过存储库进行查询:

const user = UserRepository.get(1);
const teams = UserRepository.getTeams(user.id);
const memberships = UserRepository.getTeamMemberships(user.id);

// do something with the data

如您所见,为了能够为用户获取团队,我必须 加入 team_user 表......但是当只查询成员信息时,我必须 也加入 team_user 表。

有人对如何优化这个有建议吗?或者优化是否值得在建模方面降低质量(?)?

【问题讨论】:

  • 搜索 CQRS
  • 除了术语存储库之外,您的问题中没有其他内容可以将其与领域驱动设计相关联

标签: database database-design architecture domain-driven-design data-modeling


【解决方案1】:

您应该避免查询您的域模型。您的存储库应该只返回一个完整的聚合。对于查询,您可以使用命令/查询职责分离方法,其中您有一个读取模型,或者如果适用,还有一个更原始的类型。我倾向于为相应的ISomeRepository 接口使用ISomeQuery 接口,但您可以使用适当的名称:

public class UserQuery : IUserQuery
{
    public Query.Membership FindTeamMembership(int userId)
    {
        // here we'll access the data base directly 
        // using as raw a format as possible
    }
}

我目前还喜欢在 Query 命名空间中命名读取模型,以避免与任何类似命名的域类发生冲突。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    相关资源
    最近更新 更多