J'ai besoin de conseils pour la conception de ma librairie. Explications :
Je veux développer une librairie contenant une classe abstraite - appelons-la LinkedObject - destinée à être "implémentée" par d'autres utilisateurs, dans leurs propres DLL. Enfin, par "implémenter" je veux dire qu'on doit pouvoir écrire une classe qui en hérite. (pbmes de vocabulaire...)
Jusque là pas de soucis.
Je voudrais de plus que chaque type défini par l'utilisateur de ma librairie et héritant de LinkedObject (par exemple une classe SpecificObject) puisse être relié à une certaine instance d'une certaine classe - appelons-la MDA.
Ce qui revient à dire que je veux que la classe SpecificObject possède un champ statique de type MDA.
Cependant, je ne veux pas que la charge de définir le champ statique revienne à l'utilisateur de ma librairie. D'autant que je compte me servir de ce champ dans les méthodes de ma classe abstraite.
Il faudrait donc que je puisse le définir, moi, dans ma classe abstraite LinkedObject.
Mon problème : comment faire pour que la valeur de ce champ puisse être à la fois :
- différente pour chaque type héritant de ma classe
- identique pour chaque instance d'un certain type, c'est-à-dire "statique" vis-à-vis de chaque type héritant de ma classe*
Je récapépète de façon plus visuelle :
Code évidemment faux, mais ce que je voudrais c'est qu'en appelant SpecificObject.Initialize(uneInstanceDeMDA) et AnotherSpecificObject.Initialize(uneAutreInstanceDeMDA), les deux types différents soient liés à deux instances différentes de MDA.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 namespace maDLL // oui je sais DLL et namespace c'est différent mais comme ça c'est plus clair { public abstract class LinkedObject { static MDA champProblematique; } } namespace codeDeLUtilisateurDeMaDLL { public class SpecificObject : LinkedObject { public static void Initialize(MDA champ) { SpecificObject.champProblematique = champ; } } public class AnotherSpecificObject : LinkedObject { public static void Initialize(MDA champ) { AnotherSpecificObject.champProblematique = champ; } } }
En tapant ça, je me rends compte d'ailleurs que ça serait bien si je pouvais implémenter Initialize à l'intérieur de ma classe abstraite...
Voilà.
J'ai essayé de chercher un design pattern ressemblant à ce type de problème mais je n'ai rien trouvé qui m'inspire...
Donc si quelqu'un a une idée ce serait trèèès gentil de m'aider.
Merci à tous ceux qui auront pris du temps pour lire tout ça et essayer de me comprendre !
Partager