Имам игра, която се състои от няколко модула.
Един от тях е модул база данни. Искам да го направя нещо подобно:
Database{
public:
save(&Object); //all my classes in the all modules inherit from Object
load(&Object);
};
Какъв би бил най-добрият начин да направите този модул независим от други модули (други модули ще съхраняват данни в Database
с помощта на save
и load
функции)?
Разглеждам няколко решения:
- Всички обекти имат нещо като
serialize()
метод, който е наследен отObject
клас (аналогия на Java).Database
използвайте този метод, за да получите низа и да го запазите. Очевидни недостатъци са: всички обекти трябва да имплементират нов метод и няма да е оптимално да се записват низове (без да се знае за структурата на класовете). - Направете „манифести“ за всички класове (напр. в текстов файл, който ще бъде изпратен на
Database
). Тези манифести ще опишат каква е структурата на класа (напр. един низ, два двойни, един int за рядка употреба). Недостатък е гъвкавостта - промяната на класовете в други модули ще повлияе на манифестите. - Всички класове имат собствени
save
иload
методи иDatabase
ги използват. Не го искам, защото всички класове ще трябва да знаят за типа на базата данни иsave
иload
трябва да са вDatabase
клас, а не разпределени в целия код (това е основна точка да се направи такъв модул). Database
знае за всички други модули (и ще знае как да запази всички обекти). Лошото тук е многото зависимости. Промените в някой от модулите ще засегнатDatabase
.
Кой път ще е добър? Или може би има по-добър вариант?