[résolu] Comment éviter l'emploi d'un singleton ?
Bonjour
En simplifiant l'ensemble, ainsi que les noms.
J'ai une classe "PgSql", qui encapsule l'appel aux variables et méthodes d'un framework, en l'occurrence PGSQLKit et qui me permet de gérer une BdD PostgreSQL "herbier".
J'ai une view "Connect" avec son controller "ConnectCtrl" qui initie la connexion avec la BdD "herbier".
J'ai une view "Liste" avec son controller "ListeCtrl" qui affiche le contenu de la table "plante" de la BdD "herbier".
Dans "PgSql" j'ai une méthode "connect" qui établit la connexion et renvoie un objet "connect" qui contient la connexion.
Dans "ConnectCtrl" j'ai :
PgSql *pgSql0 = [PgSql new];
connect = [pgSql0 connect];
Dans "PgSql" j'ai une méthode "plantes" qui renvoie un objet "plantes" qui contient la liste des plantes
Dans "ListeCtrl" j'ai :
PgSql *pgSql1 = [PgSql new];
plantes = [pgSql1 plantes];
Les instances "pgSql0" et "pgSql1" sont différentes. Et pourtant elles doivent utiliser le même objet "connect", l'une pour le créer, l'autre pour l'utiliser.
La solution que j'ai trouvée est un singleton "Global":
- Global *gbl = [Global shared];
- dans la méthode "connect" j'ai : gbl.connect = _connect;
- dans la méthode "plantes" j'ai : _connect = gbl.connect
Suite aux remarques pertinentes de AliGator, c'est le seul gbl.* qui me reste.
Comment m'en débarrasser ?
Merci.
PS : voir l'application ( loin d'être terminée) à : github.com/mybofy/herbier
Réponses
Bonsoir,
Pas trop clair ce que tu veux faire et c'est quoi ta problématique.
"Comment éviter l'emploi d'un Singleton" : ben ne l'emploi pas, y a rien qui te force a le faire.
SI je comprend bien, c'est ta classe PgSql qui tu doit mettre en sharedInstance, comme ça tu vas avoir juste une seule instance a manipuler.
Merci samir.
Qu'appelles-tu problématique ? Et si je n'avais pas besoin d'aide, je serais plus clair.
Si, parce que je n'ai pas d'autre solution.
Tu vois que tu as bien compris ce que je veux faire et ma problématique.
Les deux premières lignes étaient inutiles...
Je n'avais pas compris ce qu'on pouvait faire avec les singletons. Je crois même deviner que les Frameworks ont une structure de singleton (suite à quelques recherches sur le net).
Je m'y mets tout de suite.
En me basant sur le modèle
develope.apple.com > cryptocompatibily > tool/toolcommon.m
j'ai réussi à supprimer tous les autres singleton.
J'ai même un block dans mon application !
Merci à tous.