На самом деле, разница не в структуре и не в реализации, а скорее концептуальная - обе эти структуры должны представлять разные концепции.
Сообщение - структура, которая транспортирует некоторую информацию
Command - структура, которая запускает какое-то действие
При этом команда - этоТип сообщения, так как он транспортирует информацию о действии, которое нужно вызвать как минимум (и в большинстве случаев также дополнительные параметры).С точки зрения реализации, и MessageHandlers, и CommandHandlers выглядят очень похоже и зависят от того, что вы хотите сделать с информацией.
Примеры :
UserRegisteredMessage (userName) -сообщение о том, что зарегистрировано используется в системе; обработчик может отобразить эту информацию в пользовательском интерфейсе
RegisterUserCommand (userName) - команда, которая инструктирует нашу систему для регистрации пользователя, это может потребовать каких-то дополнительных действий(например, проверка на уникальность) и может потерпеть неудачу.