Привет, эксперты.
Пишу сейчас демона, в задачи которого входит общение с различными устройствами по сети и запись некоторых данных/событий в БД. Написал пару классов устройств. При запуске программы, демон подключается к БД, создает несколько объектов-устройств, которые подключаются к назначенным IP-адресам и начинают получать данные с устройств путем их опроса по таймерам.
Я не уверен, как лучше сделать взаимодействие м/у кодом демона и объектами-устройствами в плане записи всякого в БД.
Пока в голову пришли следующие варианты.
Вариант 1.
Передавать ссылку на объект-подключение_к_БД каждому созданному объекту-устройству и пусть он через эту ссылку пишет в БД все, что ему надо. Минус данного подхода: объекту-устройству нужно знать про класс-подключение_к_БД и уметь с ним работать (соотв., если я сейчас заменю либу mysqlpp на что-то другое, надо будет переделывать классы объектов-устройств). И еще непонятно, насколько это будет потокобезопасно.
Вариант 2.
Объекты-устройства отправляют демону сообщения в случае необходимости, а демон уже пишет это в БД. Минус данного подхода: чисто субъективно нарушается некоторая иерархичность, т.к. объекты-устройства начинают вызывать функции из «вышестоящего» кода, в котором они были созданы. Плюс придется делать класс для самого демона (сейчас он представляет собой тупо функцию main()) и передавать указатель на него каждому созданному объекту или же решать это через функции, указатели на которые опять же надо передать объектам-устройствам.
Вариант 3.
Сделать некую очередь сообщений, подлежащих записи в БД, на каждом объекте. Опрашивать объекты-устройства на предмет того «есть ч0 положить в БД?» из кода демона по таймеру и, если что-то есть, то демон это записывает в БД. Из минусов, непонятно, как это скажется на адекватности работы программы, если устройств будет не 10, а, например 100 или 1000 (хотя навряд ли их будет больше 10-20 в реальности при любых обстоятельствах). Ну, типа, время опроса всех железок увеличивается пропорционально их количеству.
Собственно, как пишут подобные вещи нормальные пацаны? Можно не давать конкретный ответ, а указать книгу/статью, которую можно прочесть для просвещения в данном вопросе.