C ++ модульная архитектура, круговая зависимость модуля - PullRequest
0 голосов
/ 19 марта 2019

На работе у нас есть программный проект C ++, основанный на Qt5.В настоящее время наш проект имеет 7 модулей.Каждый из них имеет свою роль.

Наша текущая проблема заключается в 2 конкретных модулях:

  • Сеть
  • Устройство

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

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

  1. Создайте новый модуль, который обернет весь протокол и позволит сетевому модулю управлять только сетью низкого уровня, имея список обратных вызовов, которые могут бытьдобавлено, чтобы добавить указанные устройства в список в модуле «Устройство».

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

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

1 Ответ

2 голосов
/ 19 марта 2019

Добавление дополнительных слоев, каждый с определенной ответственностью, обычно является хорошей идеей.

Всякий раз, когда вы можете определить четкую, разделяемую задачу, которая обеспечивает чистый интерфейс, затем создайте для нее новый слой / класс / модуль / компонент.

В вашем случае изоляция диспетчера устройств кажетсяочень хорошая идея.

Подумайте о создании еще большего количества модулей.Один модуль низкоуровневой сети (без устройства вообще).Один модуль управления устройством (без сети).Может быть, третий модуль, который содержит сетевой код устройства (как промежуточный уровень между управлением устройством и сетью)?Трудно сказать, не зная больше деталей о вашем проекте.

Модули, как правило, слишком большие и слишком сложные.Я редко видел модули, которые были слишком маленькими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...