IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[conception] gestion d'un objet omnipresent


Sujet :

C++

  1. #1
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 297
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 297
    Billets dans le blog
    2
    Par d�faut [conception] gestion d'un objet omnipresent
    Bonjour � tous,

    Ce que j'appelle un "objet omnipr�sent" c'est une instance d'une classe dont on va avoir besoin quasiment partout dans le programme. Cela arrive assez fr�quemment. Par exemple un logger, ou une classe de gestion de session sur les applis de type serveur, etc.

    Pour g�rer cela, je vois deux solutions:
    1. Le singleton, b�te et bourrin
    2. Le pointeur que l'on va se trimbaler partout

    Ca doit se sentir dans la forme de ma prose: aucune de ces 2 solutions ne me pla�t. Mais je n'en vois pas d'autre. Auriez-vous d'autres id�es � proposer?

  2. #2
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par d�faut
    Si il est omnipr�sent et logiquement instance unique, alors je pense que le singleton est la solution la plus propre.
    En tous cas, avoir ton objet pass� par pointeur dans tous les sens je trouve vraiment pas mieux.

  3. #3
    Invit�
    Invit�(e)
    Par d�faut
    Je mettrais un b�te objet global. Ou si tu n'as pas besoin de le construire, une classe avec des fonctions statiques.

    L'avantage de l'objet global, c'est si, � un moment, ton objet omnipr�sent doit exister en deux exemplaires (genre deux loggers, vers des logs diff�rents: tu peux bien sur ajouter un param�tre � tous tes appels de log, si tu as du temps libre, mais...)

    Francois

  4. #4
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par fcharton Voir le message
    Je mettrais un b�te objet global. Ou si tu n'as pas besoin de le construire, une classe avec des fonctions statiques.
    Ou tout simplement des fonctions libres avec �ventuellement acc�s � un singleton si pertinent.

    Citation Envoy� par fcharton Voir le message
    L'avantage de l'objet global, c'est si, � un moment, ton objet omnipr�sent doit exister en deux exemplaires (genre deux loggers, vers des logs diff�rents: tu peux bien sur ajouter un param�tre � tous tes appels de log, si tu as du temps libre, mais...)
    On peut aussi, si c'est ad�quat utiliser un pattern Cha�ne de responsabilit� dans ce cas.

  5. #5
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 297
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 297
    Billets dans le blog
    2
    Par d�faut
    Oui en fait, je me suis un peu emm�l� les pinceaux dans mon premier post. Je voulais parler d'un objet omnipr�sent, mais dont on peut avoir plusieurs instances.

    L'exemple des sessions dans un serveur me semble un bon exemple.
    Prenons un programme d�finit ainsi:
    - il re�oit en entr�e des requ�te provenant d'un client distant
    - pour traiter ces requ�tes, il va effectuer des recherches sur une bdd, faire des calculs, puis renvoyer le r�sultat au client
    - il doit g�rer les connections multiples (plusieurs clients connect�s en m�me temps)

    D�finition assez classique d'un serveur quelconque.
    Bien souvent, nous aurons besoin d'une petite classe, que l'on appelera Session, qui contient les donn�es d'un client (ce concept existe en natif dans certains langages "orient� r�seau" comme php par ex.).
    Pour chaque client, on aura donc une Session. Et on en aura besoin � peu pr�s partout.

    Existe-t-il un idiome pour g�rer cela de fa�on �l�gante en c++?

  6. #6
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par r0d Voir le message
    Et on en aura besoin � peu pr�s partout.
    C'est cette phrase qui me fait tiquer. La question que je me pose est plut�t de savoir si les responsabilit�s entre les classes ont bien �t� d�finies pour faire appara�tre ce besoin de voir Session partout dans la gestion du client ?

  7. #7
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par d�faut
    Pourquoi pas un SessionManager (qui lui serait un singleton), qui te permet de g�rer l'ouverture, la fermeture, l'acc�s, etc, de tes sessions.

  8. #8
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par Cheps Voir le message
    Pourquoi pas un SessionManager (qui lui serait un singleton), qui te permet de g�rer l'ouverture, la fermeture, l'acc�s, etc, de tes sessions.
    Ca me fait penser � l'intervention d'Emmanuel Deloget sur les 'god classes' dans la discussion sur Demeter.

  9. #9
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Ceci dit, je ne serais pas tr�s loin de proposer, effectivement, un singleton (� d�faut d'une classe essentiellement compos�e de membres et fonctions statiques) mais servant de "collection de sessions", regroupant les diff�rentes sessions qui, pour suivre plus ou moins l'intervention d'Emmanuel, se chargerait de:
    1. "enregistrer" les nouvelles sessions (qui lui sont envoy�es par une fabrique)
    2. "d�senregistrer" les sessions finies (qui sont indiqu�es comme telles par un "killer")
    3. retrouver une session donn�e parmi les sessions existantes
    La session contiendrait juste ce qu'il faut pour d�terminer si un acces donn� est autoris� ou non � l'utilisateur qu'elle repr�sente.

    Une fonction libre prendrait en param�tre la session, la base de donn�es � laquelle tentative d'acces est faite et le type de la requete (select, update, delete, add) et donnerait un go / no go.

    Les d�pendances seraient (d�pendant -> d�pendance)
    • Fabrique -> collection de session (registerSession(Session ) ) (amiti� )
    • "killer" -> collection de session (unregisterSession(SessionId) ) (amiti� )
    • goNoGo
      • collection de session findSession(SessionId) ->Session
      • BDD
      • RequestType
    • tout le reste ->goNoGo
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  10. #10
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par r0d Voir le message
    Existe-t-il un idiome pour g�rer cela de fa�on �l�gante en c++?
    L� je mettrais un conteneur global, contenant des objets sessions... Typiquement, si ta session est associ�e � un identifiant, un tableau associatif (map ou autre). Pour r�cup�rer une session tu fais juste conteneur_global[ma_session].

    Il te faut ensuite deux fonctions, une pour cr�er une session, une pour la fermer. Si la cr�ation est tr�s simple, tu peux la mettre dans le constructeur, qui sera appel� si tu appelles conteneur_global[ma_session] sur un identifiant inconnu... Pour la fermeture, ca peut �tre une fonction de l'objet Session (mais alors elle restera dans le conteneur), ou une fonction membre du tableau associatif.

    Francois
    Derni�re modification par Invit� ; 04/11/2009 � 18h03.

  11. #11
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Probablement qu'une variable globale pour le log est ad�quat, pour les sessions, j'en suis moins persuad�.

    Citation Envoy� par r0d Voir le message
    L'exemple des sessions dans un serveur me semble un bon exemple.
    J'ai l'impression que chaque exemple g�n�re sa solution sp�cifique (cf ci-dessus et discussion fork�e sur le log).
    D'o� :

    Citation Envoy� par r0d Voir le message
    Existe-t-il un idiome pour g�rer cela de fa�on �l�gante en c++?
    Il semblerait que chaque cas ait son type de solution et qu'on peut difficilement g�n�raliser.

Discussions similaires

  1. [conception] gestion �tiquettes
    Par ludolan dans le forum Mod�lisation
    R�ponses: 4
    Dernier message: 18/10/2005, 11h34
  2. [ Struts ]Gestion de l'objet session
    Par trax020 dans le forum Struts 1
    R�ponses: 5
    Dernier message: 22/08/2005, 16h56
  3. [Conception] gestion tables temporaires bd ?
    Par Pwill dans le forum G�n�ral Java
    R�ponses: 12
    Dernier message: 08/07/2005, 14h49
  4. [Conception] Gestion des accents dans une base de donn�es
    Par MiJack dans le forum PHP & Base de donn�es
    R�ponses: 7
    Dernier message: 07/07/2005, 11h41
  5. [Débutant(e)][Conception] prob de programmation objet
    Par gregorian dans le forum G�n�ral Java
    R�ponses: 3
    Dernier message: 07/07/2005, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo