Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将事件指定为在核心项目而不是服务项目上活动的文件_C#_.net_Microservices - Fatal编程技术网

C# 将事件指定为在核心项目而不是服务项目上活动的文件

C# 将事件指定为在核心项目而不是服务项目上活动的文件,c#,.net,microservices,C#,.net,Microservices,在我的解决方案中,我有3个项目 MyProject.Core MyProject.Services.DataImporter Myproject.Services.Cars DataImporter和Cars项目都引用了MyProject.Core项目。 我有一个事件DataImportFinishedEvent,它由DataImporter服务执行。 服务。Cars已订阅此活动,以后可能会订阅更多服务。 使用当前方法,我将此事件DataImportFinishedEvent创建为一个文件 两

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

MyProject.Core
MyProject.Services.DataImporter
Myproject.Services.Cars
DataImporter和Cars项目都引用了MyProject.Core项目。 我有一个事件DataImportFinishedEvent,它由DataImporter服务执行。 服务。Cars已订阅此活动,以后可能会订阅更多服务。 使用当前方法,我将此事件DataImportFinishedEvent创建为一个文件 两种服务都有

既然两个服务都引用了核心项目,我是否应该将此事件移动到核心项目?这样做将使文件仅位于一个位置。
这是一种好的微服务实践吗?

一般来说,在微服务中使用公共项目或库不是一种好的实践,因为这种方式耦合了两种服务的开发和部署,所以当您在公共项目中进行更改时,您必须更改和部署另外两种微服务

对于事件,最好的方法是在两个服务中都有不同的事件。这并不一定意味着它们必须被复制。在生产者端,您必须举办一场活动,其中包含任何潜在消费者所需的所有信息;在消费者端,您必须举办一场活动,其中包含该服务所需的信息,这可能会更少

这样,您将两个服务解耦,如果消费者服务明天需要生产者提供的其他信息,您只需更改消费者端,反之亦然

考虑这个问题的一种方法是,当您使用您不控制的第三方api时,您可以使用您需要的api提供的数据构建自己的响应对象,并且该对象与api使用的对象不同