dans Database.h
* tous les include sont nécessaire ?
* toutes les static const : à terme, à mettre dans un fichier de configuration
* c'est quoi BLOB_TRUE et BLOB_FALSE ?
* Database avec sémantique de singletion utile ? utilisé uniquement dans Session.cpp. Voir les nombreuses discussion là dessus sur le forum et sur le blog d'Emmanuel Deloget
* utilité d'avoir la classe en singletion
et toutes les fonctions en static ?
* homogénéité des noms de variables (définir les conventions de codage et les respecter
)
* delete instance -> utiliser unique_ptr<>
*
Format(const std::string& sFormat) -> bizarre comme fonction, elle ne semble pas faire un format mais vérifier la présence d'un placeholder dans la chaine
* de plus, pour cette fonction, tu aurais pu faire
Format(const std::string& sFormat, std::string s_Placeholder = "%") pour plus de souplesse dans le code
* manque de const aussi dans les fonctions Format
* la seconde fonction Format -> un variadic template
on en voit peu. Tu es familier avec le perfect forwarding ou tu as copié collé du code ?
L'utilisation à l'air correcte. Par contre, je suis pas sur que cela doit être de la responsabilité d'une classe Database de faire cela, tu es sur de respecter le principe de responsabilité unique ? (SRP)
* fonction Exec : tu mélanges plusieurs écriture différentes. Soit ta classe est un singleton et tu dois écrire (comme tu l'as fait) :
1 2
| Database* db = new Database();
mysqlpp::Query query = db->Exec(Database::Format("SELECT * FROM `servers` WHERE linkname ='%'", MyServerName)); |
et dans ce cas, Exec() n'a pas de raison d'être static et d'appeler
Database::getInstance() en interne.
Soit on doit écrire :
mysqlpp::Query query = Database::Exec(Database::Format("SELECT * FROM `servers` WHERE linkname ='%'", MyServerName));
et dans ce cas, oui, Exec() doit être static, mais getInstance() et le constructeur n'ont pas de raison d'être public.
Là, tu autorises les 2 écritures, c'est bof (surtout que tu mets pas ensuite Store() en static donc que la première écriture, d'où risque de confusion pour l'utilisateur, qui peut utiliser 2 écritures pour certaines fonction et 1 seule pour d'autres)
* fonction Link() -> c'est un getter, utilité ? risque de non respect du principe d'encapsulation et exposition de détail interne ?
Partager