Utilisation des datamodules et de la vcl pour implémenter un pattern observer ou non

Soyez le premier à donner votre avis sur cette source.

Vue 6 276 fois - Téléchargée 1 232 fois

Description

Le Pattern observer et une solution générique au probleme suivant :
Comment un objet previent-il des observateurs de ses changement.
Je retiens deux exemples qui m'ont amené à réfléchir:
par Pierre castelain http://castelain.developpez.com/sources/Bouboules/
par delphiProg: http://www.delphifr.com/codes/DESIGN-PATTERN-OBSERVER-IMPLEMENTATION-REUTILISABLE_37338.aspx
Les deux cas n'utilisent pas des données issus de sgbd. L'utilisation de la VCL pour l'acces aux données est d'une efficacité redoutable et implementent (on dirait bien) le pattern observer.(un ADOQuery relié à deux controles par exemple). Mais pour un novice savoir gérer la synchronisation des fiches et avec leur source de données avec cohérence est difficile. Je vous présente donc deux procédés de liaison fiche-données qui permettent soit d'implementer le DP observer, soit de l'éviter, par des utilisations differentes des datamodules.
Soit un TDatamodule est commun à plusieurs fiches (les fiches de liste des films)
Soit chaque fiche possedera un instance différente d'unê même classe de TDatamodule

Source / Exemple :


//Voici une partie des commentaires laissées dans le code
unit UVueFilm_Frm;
{Vue d'un seul film indépendant des autres.
L'idee est d'associer par composition un data module propre à chaque fiche.
Ainsi, chaque vue de film sera distincte, même sur le même film (chargé à deux moments différents).
il s'agit de créer dynamiquement un datamodule que gèrera la fiche du film.
Ce mécanisme permettra dans le cas de fiches complexes de comparer la nouvelle saisie avec les données initiales, et choisir de valider ou non (moi je n'ai rien implémenté, mais on peut 'jouer' à partir de la liste en édition)
}

unit UListeFilms_Frm;
{fiche de liste de film chaque instance sera reliée à la même instance de datamodule
A la conception, le dataset de la grille de cette fiche, est le datamodule DMUVueListeFilms du module UListeFilms_DM. 
Cette instance du datamodule sera la même pour chaque nouvelle instance de fiche TFrmListeFilms. 
Une modif sur l'une impliquera la modif sur les autres instances. Elles "observent" le datamodule
Pour une instance nommée du datamodule (DMListeFilms) à l'execution,
je l'ai ajouté dans la liste des fiches à lancer au chargement,
mais on pourrait tres bien le déclarer dans la fiche principale et l'instancier ensuite. 
}

unit UMain_Frm;
{le bouton "Afficher la liste des films dans une nouvelle fenetre"
permet d'ouvrir une nouvelle fenetre anonyme et pose le probleme de la similarité des données affichées sur l'ensemble des fenetres "listes" }

Conclusion :


Ce code n'est fait pour etre fonctionnel, mais pour illustrer la problematique que je me pose.
N'ayant pas trop de pratique de developpement, des aspect m'auront échappé ou la pratique exposée est peut etre à éviter dans des contextes de programmtion particuliers, mais elle répond à la problematique :"découpler le code données et le code interface, tout en utilisant la VCL".
Le début de solution proposée ici est en fait une utilisation réfléchie des datamodules (sans doute à améliorer d'ailleurs)
Un pas est fait, la discussion est ouverte pour pousser le bouchon.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_pouicky
Messages postés
30
Date d'inscription
lundi 26 avril 2004
Statut
Membre
Dernière intervention
4 août 2010
-
Une discussion intéressante a déjà eu lieu sur le sujet:
http://www.developpez.net/forums/showthread.php?t=76749&highlight=metier

Une question à cent balles sur la source:
Comment synchroniser l'affichage de deux fiches de film lorsqu'il s'agit du même film, et pas lorsqu'il s'git de films différents?
--> je pencherais vers la tenue d'une liste par la fiche "liste de films" (car cette fiche peut avoir la vision des sous-fiches instanciées) et la recherche dans cette liste de l'identifiant base du film pour voir si il est déjà affiché. Si oui, alors on répercute les modification faites, différents doubles.

Mais si on garde la possibilité de permettre plusieurs fiches de liste, il faut transposer cette astuce sur leur TDatamodule commun, unique qui aura un liste exhaustive.
cs_djemai
Messages postés
4
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
24 février 2007
-
Je vous remçie beaucoup sur la nouvelle façon d'utiliser le la fenêtre TDatamodule qui comporte les objets orientée et données non visible de la vcl.
C'est vraiment uen bonne voie pour realiser une application efficace avec les objets ADO qui manipule une base de donnée Access . Merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.