消息类应该是不可变的吗?

时间:2011-09-23 15:32:21

标签: c# .net messaging immutability

当我说消息类时,我指的是严格用于发送消费者(或处理程序)消费的类。

我经常看到服务总线上的教程(例如NServiceBus),它们只是在创建新消息时使使用自动属性。在我的眼中,一旦发送消息,就没有理由改变。如果消息中包含的信息发生任何更改,那么创建新消息并再次发送它似乎是公平的。

它们应该是不可变的吗?

2 个答案:

答案 0 :(得分:3)

是的,他们应该。正如您所解释的那样,创建消息后没有理由可以更改 消息通常也用于抽象和/或多线程。通过不使它们变得不可变,你可以带走不变性所带来的好处(例如线程安全)。

答案 1 :(得分:3)

使这些类不可变是有很多好处的。

消息传递系统往往可以在交付时轻松实现并行或异步。无论何时引入线程,不变性都可以提供很高的安全性并防止很多常见错误。

  

在我的眼中,一旦发送消息,就没有理由改变

如果这是您的使用场景,那么我肯定倾向于使用不可变数据类型。我个人试图在有正当理由存在可变性时才制作可变类型。否则,我总是更喜欢不变性,因为它带来的灵活性以及它在改进以后使用该类型的系统时提供的安全性(即:引入并发)。