我已经看了几篇这样的文章,但我无法澄清我脑海中关于设计的困惑。在使用micro services
时,为相关实体添加CRUD的最佳实践是什么?(我的问题通常与微服务有关,但目前我正在使用aspboilerplate,具体来说)
例如,我有一个实体Product
,其中有大约7到10个属性。然后是另一个实体ProductContract
。每个产品可以添加/更新多个合约。
为ProductContract
实体创建单独的应用程序服务是一个好主意吗?因为它将有自己的输入/输出Dtos和逻辑等。
或
最好创建一个ProductContractManager
并保持它的逻辑。然后将此管理器注入Product
应用程序服务?这样,产品应用服务就会有'AddProductContract', 'UpdateProductContract'等方法。
ProductContract
是否应该由不同的服务拥有的主要驱动因素是一致性需求,因为在微服务之间实现更强的一致性是困难的(特别是没有在DB级别将服务捆绑在一起:如果按照这种方式进行下去,可能还应该重新考虑拥有单独的微服务的决定)。所以你想问的主要问题是,如果更新/删除Product
,是否会有一个更新/删除不反映在ProductContract
中的时间窗口(反之亦然)?
如果答案是不能,那么您只需将ProductContract
的责任放在负责Product
的同一个服务中,就可以省去很多麻烦。如果最终的一致性是允许的,那么可能需要一个单独的服务:这里的考虑不是真正的技术,而是与人类组织(谁将开发和维护功能)以及对ProductContract
和Product
是否会一起发展的期望(其中一个的功能更改可能也会导致另一个的功能更改)有关。