database - 优化查询与降低建模质量

标签 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 表......但是当只查询成员信息时,我还必须加入 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/

相关文章:

android - 手机app开发(Android)带数据库和升级潜力供 friend 使用

mysql - MySQL的ANSI和Unicode驱动的区别

performance - 数据库规范化设计——单表或多表

architecture - 腐烂设计和粘度

database - 遍历 kusto 中的每一行并修改列

c# - 数据库加密问题

sql - 数据库实现 DDL 和 DML 的方式有区别吗?

mysql - 关于数据库设计的初学者问题

mysql - 从我的java/mysql webapp开始 map 缩减工作

android - View 绑定(bind)应该取代数据绑定(bind)吗?