Я искал в Интернете конкретную информацию по проектированию о том, как эффективно проектировать персистентную модель для классов C ++, и у меня не получилось.Поэтому я решил спросить это здесь.
Допустим, у меня есть 4 класса:
Класс A
Класс B
Класс C
Класс Persist
Я хочу сохранить классы A, B и C на диске, используя класс "Persist", чтобы один файл содержал информацию о конфигурации для каждого класса:
my_module.json
{
A {
...
},
B {
...
},
C {
...
}
}
Myвопрос в том, каков наилучший подход к разработке такой, чтобы следовать принципам SOLID?
Например, принцип единой ответственности предполагает, что класс должен иметь только одну ответственность (или только одну причину для изменения) и ЗаконДеметры предполагает, что классы знают как можно меньше друг о друге.
Итак:
1) Должен ли класс знать, как сериализовать себя, или это уже нарушит единственную ответственность?
2) Если я использую стороннюю библиотеку, такую как "cereal", для сериализации "Class A", мне нужно будет добавить теги к внутренним членам "Class A", чтобы показать движку, как он должен сериализоваться.Это увеличивает связь между «Классом А» и сторонним движком, что должно быть плохо, верно?
3) Должен ли я вместо этого использовать промежуточные классы, которые переводят объект из «Класса А» в объект с соответствующими тегамичто сторонняя библиотека поймет?Это устраняет любые знания о сериализации из «Класса А», но добавляет больше сложности и больше классов.
4) Должен ли класс знать о модуле постоянства?Реально ли это при попытке сериализации?Если да, то как класс должен уведомить модуль персистентности о том, что состояние изменилось и настало время для сохранения?Или модуль постоянства должен просто периодически опрашивать объекты на предмет новой конфигурации?
Я довольно новичок в ОО, но глубоко заинтересован.Особенности взаимодействия между классами будут очень полезны.Спасибо.