Недостаток дизайна в собственной архитектуре обработки сообщений IoT-Device - PullRequest
2 голосов
/ 10 мая 2019

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

UML diagram of current structure

Я думаю, что этот вид реализации является структурно правильным, потому что устройство имеет конфигурацию и(заменяемый) MessageHandler.Это означает, что IOTDevice не заботится о том, как сообщение отправляется по сети.

Проблема: Когда я получаю сообщение извне (т. Е. MessageHandler получает сообщение, вызывается метод handle),Я хочу иметь возможность выполнить предопределенное поведение, которое определено в одном из классов IOTDev_X (то есть вызвать метод doX (), doY () или doZ ()).Но MessageHandler ничего не знает об IOTDevice.Таким образом, невозможно вызвать определенный метод, когда он получает входящее сообщение.

Одним из решений, о котором я думал, было бы то, что MessageHandler содержит IOTDevice.Но, с моей точки зрения, это похоже на плохой дизайн.

Что было бы хорошим методом для преодоления этой проблемы (в лучшем случае без отказа от полного дизайна).

1 Ответ

1 голос
/ 10 мая 2019

Как насчет шаблона наблюдателя?

enter image description here

Ваш IOTDevice может быть превращен в MessageObserver с использованием интерфейса, а ваш MessageHandler может быть превращен в MessageObservableчерез интерфейс.

Теперь Зарегистрируйте свой IOTDevice в MessageHandler для прослушивания события.Зарегистрируйтесь, просто заполните коллекции MessageEventObserver. Ваш MessageHandler теперь может уведомлять с помощью сообщения о событии. Получил ваш IOTDevice, просто зациклив, бросив зарегистрированный MessageEventObserver и вызвав MessageIncoming

.
...