[résolu] Comment éviter l'emploi d'un singleton ?

mybofymybofy Membre
septembre 2013 modifié dans API AppKit #1

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.


     




     


    Pas trop clair ce que tu veux faire et c'est quoi ta problématique.


     




     


     


    Qu'appelles-tu problématique ? Et si je n'avais pas besoin d'aide, je serais plus clair.


     




    "Comment éviter l'emploi d'un Singleton" : ben ne l'emploi pas, y a rien qui te force a le faire.


     




     


     


    Si, parce que je n'ai pas d'autre solution.


     




     


    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.




     


    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.


Connectez-vous ou Inscrivez-vous pour répondre.