我必须提供用户所属的团队和会员信息。
这是一个多对多关系,因此我有一个team_user
包含会员信息,例如role_type
,invited_at
。
我得到了一个team
表,其中包含有关团队本身的信息,例如name
和description
。
现在我有两种方法通过存储库查询:
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
表。
有没有人有关于如何优化这个的建议?或者不是优化值得在建模方面降低质量(?)?
答案 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
命名空间中命名读取模型,以避免与任何类似命名的域类冲突。