Bonjour,

Je cherche à résoudre le problème d'architecture suivant. D'un côté une librairie générique qui contient à la fois une hiérarchie et des structures de classe (fonctions, types d'objets encapsulés, ...). De l'autre côté, l'implémentation de cette librairie sur un problème concret.

Librairie générique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
IBase<IResource>[Initialize(), Run()] -> IBaseType1<IResourceType1>,  IBaseType1<IResourceType2> -> ...  -> IBaseType1.A.IV<IResourceType1.A.IV>
Implémentation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
AbstractType1:IBaseType1<ResourceType1>
ConcreteType1:AbstractType1, IBaseType1.A.IV<ResourceType1.A.IV>
Mon problème vient de l'organisation de la hiérarchie : je veux pouvoir implémenter un niveau hiérarchique de la structure de base, pour pouvoir par exemple faire une fonction Initialize() commune (classe AbstractType1), mais aussi avoir les fonctions spécifiques d'un sous-niveau (classe ConcreteType1). Pour ça, j'ai l'impression qu'on ne peut travailler qu'avec des interfaces dans la librairie générique.
L'architecture que j'ai implémenté ci-dessous me pose deux problèmes:

1.
Lorsque je déclare
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
IBase<ResourceType1> instance = new ConcreteType1();
instance.Initialize()
, on ne passe pas dans ConcreteType1.Initialize(), même si cette fonction est déclarée en 'new' par rapport à AbstractType1.Initialize()

2.
Avec les interfaces, je ne peux renseigner aucun code dans la librairie générique alors qu'il y a du code générique (commun à toutes les branches ou spécifiques à certaines) que j'aimerais décrire, par exemple la fonction Run() du dernier élément d'une branche.


Merci d'avance pour vos lumières !