我必须提供用户所属的团队和成员信息。
这是一个多对多关系,所以我有一个包含成员信息的 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
表......但是当只查询成员信息时,我还必须加入 team_user
表。
有人对如何优化它有建议吗?还是优化不值得在建模方面降低质量(?)?
最佳答案
您应该避免查询您的领域模型。您的存储库应该只返回完整的聚合。对于查询,您可以使用命令/查询职责分离方法,其中您有一个读取模型,或者如果适用,还有一个更原始的类型。我倾向于为相应的 ISomeRepository
接口(interface)使用 ISomeQuery
接口(interface),但您可以使用任何合适的名称来命名它们:
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
命名空间中命名读取模型,以避免与任何类似命名的域类发生冲突。
关于database - 优化查询与降低建模质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47440361/