优化查询与降低建模质量

时间:2017-11-22 17:08:46

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

我必须提供用户所属的团队和会员信息。 这是一个多对多关系,因此我有一个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表...但是当仅查询成员资格信息时,我必须< em> join team_user表。

有没有人有关于如何优化这个的建议?或者不是优化值得在建模方面降低质量(?)?

1 个答案:

答案 0 :(得分:2)

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

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命名空间中命名读取模型,以避免与任何类似命名的域类冲突。