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

Design Patterns Discussion :

[patterns] conseil sur le fonctionnement de mon programme


Sujet :

Design Patterns

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Points : 28
    Points
    28
    Par défaut [patterns] conseil sur le fonctionnement de mon programme
    Bonjour,

    J'aimerai avoir votre avis sur le fonctionnement de mon programme.

    J'ai divers objet de type different et qui sont manipulé par le programme.
    Tout ces objets sont copié dans une base de donnée lorsque plus aucune personne n'utilise l'objet ( c'est a dire lorsqu'il n'y a plus de pointeur vers cet objet ) et que cette objet n'a pas eu une demande de suppression. Lors d'une demande de supression de l'objet, l'objet est suprimer de la base de donnee et n'est donc pas copié...

    Un utilisateur du programme peut demander une copie d'un objet de la base de donnée lorsqu'une copie existe. Dans le cas contrere, on lui fourni un objet nouveau.

    C'est donc l'objet qui, dans son destructeur, desside de faire appele ( ou pas )
    a sa base de donnée pour se faire copier dans la base de donnée.

    Ce type de systeme m'a ete inspiré du fonctionnement des fichiers dans unix ( cf: buffer, inode memoire, inode disque,... ).

    Est-ce une bonne idée de faire ceci ou est-il mieux de copier les objets dans la base de donnée lorsque l'utilisateur le demande explicitement? C'est a dire que dans le premier cas, c'est l'objet qui demande de se faire copier dans la base de donnée, et dans l'autre cas, c'est l'utilisateur qui demande de copier l'objet a la base de donnée.

    Merci et bonne jourée

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Je ne suis pas sur d'avoir bien compris, mais à première vue il y a un dilemne.

    Tu souhaites qu'un objet qui n'est plus référencé prenne la désicion de se sauvegarder dans une BDD lors de sa destruction. Au delà même du fait que je ne sais pas si il est possible qu'un objet ai connaissance de son propre référencement, si tu est capable d'invoquer un destructeur sur un objet, c'est que tu possède nécessairement sa référence ! Cet objet ne pourra donc jamais prendre la désicion de se sauvegarder. Je sais pas si je suis très clair ...
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Points : 28
    Points
    28
    Par défaut
    En fait, ce n'est pas reelement lorsqu'il n'a plus de reference vers lui qu'il se copie. Il se copiera lorsque le dernier, qui a une reference vers l'objet, relache la reference.
    J'utilise un simple compteur pour savoir le nombre de reference qu'a l'objet et lorsque se compteur est egal a 1 et qu'on se trouve dans le destructeur, alors, on le copie dans la base de donnée.

  4. #4
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    On touche à des notions de responsabilité, et donc une réponse est plus philosophique qu'objectivement technique...

    A mon sens, ce n'est pas à l'objet lui-même de s'occuper de sa persistence en base de donnée. Sa responsabilité devrait se limiter à indiquer le jeu de valeurs nécessaires à sa persistence (cf. mécanismes de sérialisation).

    D'autre part, si j'ai bien compris ton mécanisme, tu prends le contre-pied de ce qui se fait habituellement :

    1. L'objet existe en base de donnée
    2. Lorsqu'une demande arrive, l'objet est chargé et mis dans un système de cache.
    3. Lors des demandes suivantes, l'objet est accédé directement à partir du cache.
    4. On synchronise l'état de l'objet avec sa représentation en base selon les manipulations de l'utilisateur.

    Bref, c'est très générique tout cela, peut être que des informations sur ton environnement aideraient à être plus précis sur les conseils.
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    Comme déjà dit avant, c'est un peu trop générique pour te conseillé.

    Cependant quelques règles de programmation existes pour améliorer la lisibilité et partager les responsabilités

    Il est vivement déconseillé de mettre tout le code logique d'accès à la base de données dans ton objet "métier", mais plutot dans un objet à part fait pour ca.

    Ensuite selon l'environnement ce que tu demande est "possible" avec des réserves.
    Comme déjà cité, si tu procède comme tu procède sa signifie que quelque part tu as un controleur qui controle le nombre de références à l'objet... pourquoi donc ne pas mettre les appels vers le code logique gérant ta persistance dans ce "contrôleur".

    Puisque tu gere ton système de la sorte, mettre au point un vrai controleur s'il n'y en a pas ne devrait pas poser de problème.
    Et en plus ca t'évitera de laisser le choix de la persistance au client, surtout si celui-ci oublie de le sauver alors qu'il le fallait...

    Dans une application .NET par exemple, l'objet peut avoir connaissance du moment où il n'y a plus aucune référence vers lui et qu'il va être "sacrifié" cad nettoyé par le Garbage Collector.
    Malheureusement, le moment où ce nettoyage arrive n'est pas forcément juste après la perte de toutes les références mais parfois une éternité après (en informatique une éternité n'a rien avoir avec la notion humaine...)
    Autre problème, si ton objet est en cours de nettoyage, (que le GC appel le Finaliseur de l'objet) s'il fait référence à d'autres objets managés (suceptible d'etre balayé par le GC) tu ne peux pas y accèder de façon sure, car l'ordre de suppression des objets n'est pas hierarchique (en clair, il se peut qu'un des objets dont tu as la référence, soit supprimé avant toi)

    D'autres langages ne permettent carrément pas de gérer un destructeur ou finaliseur (Java et d'autres langages managés)

    Globallement tu ne peux pas faire confiance au destructeur pour savoir si l'objet peut etre supprimé ou non de la base... si n'importe quel utilisateur de ton code fait delete objet en C++ par exemple... le destructeur est appelé, et meme si celui-ci ne libere pas correctement les ressources, quelque soit l'état de son compteur de référence, il sera "DETRUIT" et c'est absolument IMPARABLE, et même une exception ne sauvera pas ton objet de la destruction.

Discussions similaires

  1. Conseils sur l'organisation de mon appli
    Par Turvy dans le forum Android
    Réponses: 5
    Dernier message: 02/12/2013, 12h33
  2. Conseil sur l'architecture de mon projet
    Par Goffer dans le forum Flex
    Réponses: 2
    Dernier message: 17/07/2009, 11h27
  3. Savoir sur quel os tourne mon programme
    Par clampin dans le forum Débuter
    Réponses: 4
    Dernier message: 13/09/2008, 00h28
  4. Drag nDrop sur le racourcis de mon programme
    Par marinz dans le forum C#
    Réponses: 1
    Dernier message: 18/03/2008, 13h12
  5. Réponses: 4
    Dernier message: 10/05/2007, 03h21

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