Обработчик должен уметь (в перспективе) разбирать конфиги в различных форматах (ini, json, xml, файлы в "своём" формате) и расположенных в разных хранилищах (реестр windows, база(ы) данных, и тп), синхронизировать блок настроек между провайдерами хранения настроек. Обработчик должен уметь работать с различными типами данных (с значениями поля конкретной настройки)
Возможные методы:
- получить значение конкретной настройки (из загруженной в память структуры или напрямую из ресурса)
- вывести все настройки в массив (который получит программа) и\или все настройки конкретной секции
- ввести конкретное значение для конкретной настройки
- сохранить настройки в ресурсе (без параметров - в исходном ресурсе, с параметром - в другом)
- добавление и удаление секции в настройках
- вписывать\считывать настройки, например, путь реестра или логин пароль для бд (последнее спорно), увидев которые обработчик бы предложил\показал возможность(как?) сохранить файл туда
Определение: Данный класс предоставляет:
- примитив опции конфигурации (имя,значение) (Data)
- объект для хранения в памяти структуры-объединения для примитивов - секция (CustomConf::Section)
- объект для хранения в памяти структуры-объединения для секций - конфиг (CustomConf::Conf)
- объект для загрузки\сохранения\выборки данных из ресурсов (CustomConf::CSource) (ресурсом может быть что угодно)
Подробности: 1)Объект хранилища данных Data для примитивов имеет два поля - имя примитива и сам примитив. в поле примитива может быть записана любая переменная следующих типов - <bool, int, double, CString, std::byte> не конечный список
2)Объект Conf предоставляет возможность сохранять в нем всю конфигурацию из ресурса, проводить поиск по имени примитива Data (возможно сортировать?)
3)Объект Source предоставляет возможности работы с ресурсами - файлами, бд, реестром - загрузка/сохранение значений по именному идентификатору(по идее должен искать только с ресурса)
Предполагаемый каркас таблицы для бд: table settings; |int id|string name|(maybe)blob data|string section| or |int id|string name|string data|string section| Возможная логика обработки типов: