/ / Дизайн протоколу в C ++, циклічне членство в класі - c ++, схеми дизайну

Процес проектування в C ++, циклічний членський клас - c ++, дизайн-схеми

Я "намагаюся створити комунікаціюПротокол в C ++ і хочуть абстрагувати різні шари протоколу, щоб вони могли бути змінені в майбутньому, якщо потрібно, без необхідності змінювати весь додаток.

Поки що я створив це:

  1. Застосування --- напр. клімат-> Установити температуру (70);
  2. Модуль (напр. Клімат) --- напр. протокол-> SetRegister (23, 70);
  3. Протокольний шар --- наприклад. msg [] = {0x4C, 0x55, 0x17, 0x46}; comm-> SendPacket (мсг);
  4. Комунікаційний шар

Проблема виникає на шляху повернення:

  1. Комунікаційний шар
  2. Протокольний шар
  3. Модуль
  4. Застосування

Я не хочу, щоб програма постійно була в курсізапит модуля для даних, а потім модуль, який запитує протокол, і протокол, який запитує рівень зв'язку, але зворотні виклики в кожному з класів "перекидають" дані здаються безладними. Як правило, лише рівень зв'язку буде знати, чи є додаткові дані, які варто обробляти (байт протокольного рівня тощо)

Чи є краща модель дизайну?

Відповіді:

1 для відповіді № 1

Цілком ймовірно, що ви не здійснюєте синхронний зв’язок, тож ви не можете чекати, поки на рівні рівня зв'язку з’явиться відповідь.

Отже, у нас є застосування-> модуль-> протокол-> зв’язок. Це все для сторони передачі (крім будь-яких повторів тощо) з різних шарів).

Ви не говорите, як насправді збираються дані,Швидше за все, рівень комунікацій не дізнається про будь-які дані, поки ви не скажете це, як система повідомлень / подій є в додатку. Тож вам потрібно це все одно викликати, і додаток здається неправильним знати як про модулі, так і про всі комунікаційні шари.

Тому передайте зібрані дані Модулям і нехайвони передають його вниз по ланцюгу, якщо дані мають сенс, вони зрештою досягнуть верхнього рівня. Додаток повинен "підписатися" на події з модулів, щоб отримати необхідні дані (події та спостерігачі). Підписки між шарами не потрібні. повідомлення, як ви їх будете телефонувати, щоб все одно надати їм роботу, тому вони можуть просто повернути результат обробки.