将事件指定为文件以存在于核心项目而不是服务项目上

specifying events as files to live on Core project instead of service project

在我的解决方案中,我有 3 个项目

MyProject.Core
MyProject.Services.DataImporter
Myproject.Services.Cars

DataImporterCars 项目都引用了 MyProject.Core 项目。 我有一个由 DataImporter 服务发出的事件 (DataImportFinishedEvent)。 Services.Cars 已订阅此活动,稍后可能会订阅更多服务。 使用我目前的方法,我将此事件 (DataImportFinishedEvent) 作为文件创建 在这两项服务上。

既然这两个服务都引用了 Core 项目,我应该将此事件移到 Core 项目吗?这样做只会将文件放在一个位置。 这是一个好的微服务实践吗?

一般来说,在微服务中拥有公共项目或库并不是一个好的做法,因为这样你就耦合了两种服务的开发和部署,所以当你在公共项目中进行更改时,你必须更改和部署其他两个微服务。

在事件的情况下,最好的方法是在两个服务中有不同的事件。这并不一定意味着它们必须被复制。在生产者方面,您必须有一个事件,其中包含任何潜在消费者所需的所有信息,而在消费者方面,您必须有一个事件,其中包含该服务所需的信息,可以更少。

通过这种方式,您可以解耦这两个服务,如果明天消费者服务需要生产者提供的其他信息,您只需更改消费者端,反之亦然

一种思考方式是,当您使用您无法控制的第三方 api 时,您可以使用您需要的 api 提供的数据构建自己的响应对象并且此对象与 api 使用的对象不同。