1

假设我有以下结构:

public class Parent
{
    public string Id;
}

public class FirstChild:Parent
{
    public string FirstName;
}

public class SecondChild:Parent
{
    public string LastName;
}

我有两个通过请求/响应消息传递方法联系的服务。

我的第一个服务发送一条消息并期望 FirstChild 或 SecondChild 作为响应,所以我所做的是:

var client = bus.CreateRequestClient<CommandType, Parent>(serviceAddress, TimeSpan.FromSeconds(50));
var response = await client.Request(command);

问题是响应是从包含 Id 和 FirstName/LastName 的第二个服务发送的,但由仅包含 Id 的第一个服务接收。

我怎样才能覆盖这个问题?

4

1 回答 1

3

编写你的类而不是继承它们。

一般来说,组合优于继承 更喜欢组合而不是继承?

在大多数情况下,它将导致更灵活和更易于维护的代码。

因此,与其继承父级,不如像这样编写它:

public class FirstChild
{
   Parent parent {get; set;}
   string firstName {get; set;}
}

通过这种方式,您声明 FirstChild 'has-a' 父母而不是 FirstChild 'is-a' 父母。

我相信这基本上是你的问题所在。

MassTransit 文档正确地警告不要在消息中使用继承。不要将您的消息设计与 OO 设计混淆。消息只是没有行为的状态。

于 2018-01-28T12:06:30.057 回答