c# - 将事件指定为文件以存在于核心项目而不是服务项目上
问题描述
在我的解决方案中,我有 3 个项目
MyProject.Core
MyProject.Services.DataImporter
Myproject.Services.Cars
DataImporter
和项目都Cars
引用MyProject.Core
项目。我有一个DataImportFinishedEvent
由DataImporter
服务发出的事件 ( )。
Services.Cars
订阅了此事件,以后可能还会订阅更多服务。使用我目前的方法,我将此事件 ( DataImportFinishedEvent
) 作为在两个服务上创建的文件。
由于这两个服务都引用核心项目,我应该将此事件移动到核心项目吗?这样做只会将文件放在一个位置。这是一个好的微服务实践吗?
解决方案
一般来说,在微服务中拥有公共项目或库并不是一个好的做法,因为这样你就耦合了这两个服务的开发和部署,所以当你在公共项目中进行更改时,你必须更改和部署另外两个微服务。
在事件的情况下,最好的方法是在两个服务中都有不同的事件。这不一定意味着它们必须被复制。在生产者端,您必须有一个事件,其中包含任何潜在消费者所需的所有信息,而在消费者端,您必须有一个事件,其中包含该服务所需的信息,可能更少。
这样,您将两个服务解耦,如果明天消费者服务需要生产者提供的其他信息,您只需更改消费者端,反之亦然
一种思考方式是,当您使用不受您控制的第三方 api 时,您使用所需 api 提供的数据构建自己的响应对象,并且该对象与 api 使用的对象不同。
推荐阅读
- c# - 如何“门”一个 Observable
- reactjs - 使用对象 destructuring.eslint(prefer-destructuring)
- maven - Maven Shade Plugin:只创建SNAPSHOT,不发布
- c++ - 如何在 C++ 中使用 CreateProcessW 运行具有多个参数的 exe
- css - 如何在 ng2-smart-table 上显示自定义图标?
- c - 重新创建 strlcat 函数,被分段错误杀死(信号 -11)
- spring-batch - 无法安装本地云服务
- android - 从java调用Kotlin代码-> java.lang.NoClassDefFoundError: Failed resolution of: Ljava/util/concurrent/CompletableFuture;
- javascript - 在 HTML、Javascript 项目中为材料设计组件添加可见性切换?
- java - 如何在 Android Studio 中使用带有 TextView 的矩形背景?