Мне поручено поддерживать и обновлять библиотеку, которая позволяет компьютеру отправлять команды на аппаратное устройство и затем получать его ответ. В настоящее время код настроен таким образом, что каждая возможная команда, которую может получить устройство, отправляется через его собственную функцию. Повторение кода везде; худший кошмар сухого адвоката.
Очевидно, что есть много возможностей для улучшения. Проблема в том, что каждая команда имеет разную полезную нагрузку. В настоящее время данные, которые должны быть полезными данными, передаются каждой командной функции в форме аргументов. Трудно объединить функциональность, не доведя сложность до уровня, который вызывает библиотеку.
Когда от устройства получен ответ, его данные помещаются в объект класса, единолично ответственного за хранение этих данных, они больше ничего не делают. Есть сотни классов, которые делают это. Эти объекты затем используются для доступа к возвращенным данным на уровне приложения.
Мои цели:
Уменьшить количество повторений кода
Поддерживать подобный уровень сложности на прикладном уровне
Упростить добавление новых команд
Моя идея:
Имеют одну функцию для отправки команды и одну для получения (функция получения вызывается автоматически при обнаружении ответа от устройства). Иметь структуру, содержащую все данные команды / ответа, которые будут переданы отправляющей функции и возвращены получающей функцией. Поскольку каждая команда имеет соответствующее значение перечисления, есть оператор switch, который устанавливает данные для каждой команды для отправки.
Моя идея - лучший способ сделать это? Есть ли здесь шаблон дизайна, который я мог бы использовать? Я смотрел и смотрел, но, кажется, ничто не соответствует моим потребностям.
Заранее спасибо! (Пожалуйста, дайте мне знать, если уточнение необходимо)