Инверсия зависимостей и данные, не зависящие от устройства

Я работаю над приложением, нижний уровень которого состоит из устройства связи ввода-вывода (скажем, последовательного порта).

Чтобы создать более ценный инструмент с минимальными усилиями, на соседние уровни не должны влиять изменения среды связи (например, Ethernet или USB). Это утверждает, если я не ошибаюсь, использование принципа инверсии зависимости, среди других. Я посмотрел на примеры.

class DataIOClient
{
public:
DataIOClient(void){}
~DataIOClient(void){}

virtual void WriteData(DataIOClientData* data) = 0;
virtual void ReadData(DataIOClientData* data) = 0;
};

Этот интерфейс вместе с соответствующей реализацией (которая будет зависеть от выбранной архитектуры связи) должен отделить мой верхний уровень от уровня связи.

Однако я столкнулся с проблемой инициализации. Поскольку каждая из архитектур запрашивает разные параметры инициализации (например, 9600 8N1 в COMPort или 192.168.1.2 в Ethernet или LPT1 для связи через параллельный порт), я не могу выяснить схему зависимости или основную абстракцию, чтобы сделать ее осуществимой.

Если бы DataIOClient априори «знал» входные параметры, которые запрашивает реализация, он был бы связан и больше не инвертировался, я прав? У меня нечеткое ощущение, что я неправильно понимаю правильное применение этого принципа.

Спасибо

0

Решение

Похоже, текстовый файл конфигурации вместе с параметрами должен работать; Вы анализируете конфигурацию и вызываете подходящую заводскую функцию:

.конфигурации:

IOClient = { type = "ethernet", config = { host = "12.34.56.78", port = "8080" } }

IOClient = { type = "usb", config = { } }

IOClient = { type = "serial", config = { device = "/dev/modem" } }

creator.cc:

item = read_tuple("IOClient");

std::unique_ptr<DataIOClient> = factory.create(item["type"], item["config"]);
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector