/Conf

Provides storage and manipulation of settings

Primary LanguageC++

Conf


Обработчик конфигов



Архитектура:


Обработчик должен уметь (в перспективе) разбирать конфиги в различных форматах (ini, json, xml, файлы в "своём" формате) и расположенных в разных хранилищах (реестр windows, база(ы) данных, и тп), синхронизировать блок настроек между провайдерами хранения настроек. Обработчик должен уметь работать с различными типами данных (с значениями поля конкретной настройки)

Возможные методы:

  1. получить значение конкретной настройки (из загруженной в память структуры или напрямую из ресурса)
  2. вывести все настройки в массив (который получит программа) и\или все настройки конкретной секции
  3. ввести конкретное значение для конкретной настройки
  4. сохранить настройки в ресурсе (без параметров - в исходном ресурсе, с параметром - в другом)
  5. добавление и удаление секции в настройках
  6. вписывать\считывать настройки, например, путь реестра или логин пароль для бд (последнее спорно), увидев которые обработчик бы предложил\показал возможность(как?) сохранить файл туда

Определение: Данный класс предоставляет:

  1. примитив опции конфигурации (имя,значение) (Data)
  2. объект для хранения в памяти структуры-объединения для примитивов - секция (CustomConf::Section)
  3. объект для хранения в памяти структуры-объединения для секций - конфиг (CustomConf::Conf)
  4. объект для загрузки\сохранения\выборки данных из ресурсов (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| Возможная логика обработки типов: