【问题标题】:CQRS Read model with 2 resource具有 2 个资源的 CQRS 读取模型
【发布时间】:2018-06-14 19:01:24
【问题描述】:

我有两个总根:员工和公司。使用 CQRS 我有 2 个动作来创建每个模型: CreateCompany (/company) 和 NewEmploy (/employe) 通过 POST。同样,通过 GET 检索 GetCompany (/company/{id}) 和 GetEmploy (/employe/{1}) 的 2 个操作。我想获取属于公司的员工,所以我创建了下一个端点 /company/1?include=employees,但我不知道是否必须加入我的模型才能让员工与公司或每次我添加新员工时修改读取模型直接获取而不加入。现在我使用相同的表来写入模型和读取模型。

【问题讨论】:

    标签: cqrs jsonapi-resources


    【解决方案1】:

    我不知道我是否必须在我的模型中加入才能让员工与公司相关,或者每次我添加新员工时修改读取模型以直接获取而不加入。

    实际上有三种选择。

    1) 当您添加新员工时,还运行连接查询并使用结果更新读取模型;查询读取模型时,只返回最新的副本。

    2) 当您添加新员工时,停止。当您查询读取模型时,运行连接以更新您的数据,然后返回此副本

    3) 当您添加新员工时,停止。当您查询读取模型时,只需返回最新的副本。 在后台,运行一个任务以查看是否添加了新员工 - 如果是,则运行联接并更新读取模型。

    在后台运行可能意味着很多不同的事情 - 您可以在每次添加员工时安排工作,可以使用调度程序运行工作,可以让管理员控制按需运行工作。

    您最终可能会根据您需要满足的 SLA 类型(在人们开始抱怨之前允许读取模型中的数据有多“旧”)做出选择,并处理您将如何允许用户读取自己的写入,系统中使用了哪些其他类型的缓存。

    要理解的重要一点是,“将写入模型转换为读取模型”是一种可以在写入和读取之外运行的操作。

    【讨论】:

    • 1) 我应该同步还是异步?我的意思是,一旦事件 (EmployeAdded) 发生并且新雇员被添加到写入模型中,事件总线应该执行侦听器 (UpdateCompanyQuery) 同步或发送到执行异步的 rabbitmq。 2)我会在CompanyRepository select * from company c inner join company_employ ce... 并返回这个结果,对吗? 3)我认为与选项1相同,但异步,对吧?
    猜你喜欢
    • 2018-04-28
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多