Должны ли классы сообщений быть неизменными? - PullRequest
2 голосов
/ 23 сентября 2011

Когда я говорю о классах обмена сообщениями, я имею в виду классы, которые используются строго для отправки и использования потребителем (или обработчиком).

Часто я вижу учебные пособия по служебным шинам (например, NServiceBus), которые просто делают Heavy использование автоматических свойств при создании новых сообщений.На мой взгляд, когда сообщение отправлено, причин для изменения нет.Если какие-либо изменения должны произойти в информации, содержащейся в сообщении, то кажется справедливым создать новое сообщение и отправить его снова.

Должны ли они быть неизменными?

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

Есть много преимуществ в том, чтобы сделать эти классы неизменяемыми.

Системы обмена сообщениями имеют тенденцию быть чем-то таким, что можно легко сделать параллельным или асинхронным при их доставке.Каждый раз, когда вы вводите многопоточность, неизменность может обеспечить огромный уровень безопасности и предотвратить множество распространенных ошибок.

На мой взгляд, после отправки сообщения нет причин для изменения

Если это ваш сценарий использования, тогда я определенно склонен работать с неизменяемыми типами данных.Лично я стараюсь создавать изменяемые типы только тогда, когда есть веская причина иметь мутабильность.В противном случае я всегда предпочитаю неизменность из-за гибкости, которую он обеспечивает, и безопасности, которую он обеспечивает при улучшении систем, использующих этот тип позже (т. Е. Введение параллелизма).

3 голосов
/ 23 сентября 2011

Да, они должны.Нет причин, по которым сообщение можно изменить после их создания, как вы объяснили.
Также сообщения обычно используются для абстракции и / или многопоточности.Не делая их неизменяемыми, вы лишаете их преимуществ (например, безопасности потоков).

...