【问题标题】:Best Practice for handling related entities in Application Service / (Microservice)应用服务/(微服务)中处理相关实体的最佳实践
【发布时间】:2021-09-03 06:11:23
【问题描述】:

我浏览过一些帖子,例如 THISTHIS 等,但我无法澄清我脑海中关于设计的困惑。在使用micro services 时,为相关实体添加 CRUD 的最佳做法是什么? (我的问题一般与微服务有关,但目前我使用的是aspboilerplate,具体来说)

例如,我有一个实体Product,其中包含大约七到十个属性。然后我们可能有另一个实体ProductContract。每个产品可以添加/更新多个合同。

问题:为ProductContract 实体创建单独的应用程序服务是个好主意吗?因为它将拥有自己的输入/输出 Dtos 和逻辑等。

最好创建一个ProductContractManager 并将其逻辑保留在那里。然后将这个管理器注入Product应用服务?这样一来,产品应用服务就会有 'AddProductContract'、'UpdateProductContract' 等方法。

【问题讨论】:

    标签: .net-core design-patterns microservices aspnetboilerplate


    【解决方案1】:

    ProductContract 是否应该由不同的服务拥有的主要驱动因素是一致性要求,因为在微服务之间实现更高级别的一致性是困难的(尤其是没有在数据库级别将服务捆绑在一起:如果那样下去,可能还应该重新考虑拥有单独微服务的决定)。因此,您要问的主要问题是,如果更新/删除 Product 是否有时间窗口不会在 ProductContract 中反映更新/删除(反之亦然)?

    如果答案是不能,那么只需将ProductContract 的责任放在负责Product 的同一服务中,就可以省去很多麻烦。如果允许最终的一致性,那么可能需要一个单独的服务:考虑不是真正的技术,而是与人类组织(谁将开发和维护功能)以及围绕ProductContractProduct 的期望更相关将一起发展(其中一个的功能变化也可能导致另一个的功能变化)。

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 2012-10-18
      相关资源
      最近更新 更多