Я обнаружил, что предоставление пространства имен "Messages", содержащего ваши строго типизированные сообщения, очень полезно.Имейте в виду, что четко определенные сообщения будут больше похожи на контракты / DTO - вы хотите поддерживать как можно большую развязку, поэтому зависимости должны быть сведены к минимуму, иначе отправители и получатели будут полагаться на общие библиотеки.Иногда это необходимо из-за характера сообщения.
Я думаю, вы также обнаружите, что многие сообщения могут следовать определенному шаблону.Два общих шаблона сообщений - это то, что я назову Действие и Команда.Действие - это больше «глагол» и «субъект».
Например, у вас может быть MessageAction, который выставляет T Target, а действие представляет собой перечисление, которое указывает обновление, выбор, добавление, удаление и т. Д. Это часто встречается, и универсальное сообщение может переносить его, а ваши обработчики слушаютдля обобщений, которые закрывают интересующий их тип.
Команда - это Действие, которое исходит откуда-то и затем применяет действие к цели.Например, может быть, вы добавляете роль пользователю.В этом случае ваш интересующий объект - это роль, ваша цель - пользователь, а ваше действие добавляет его.Это может быть CommandAction.
Другим распространенным способом организации сообщений является реализация общего интерфейса или базового класса.Затем становится просто искать разработчиков в проекте, чтобы определить, где используются сообщения.