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

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

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.