Bonjour,
Je suis face à un dilemme et j'aimerais connaître votre vision des choses d'un point de vue strictement objet (par opposition au point de vue "c'est plus pratique de faire ainsi " ) :
Schématisons mon problème :
- J'ai une TForm A sur laquelle je pose une grille et un certain nombre de composants. A fait quelques traitements de mise en page.
- Une TForm B et une TForm C héritent de A
- Ce qui différencie B et C est le nombre de lignes de la grille et l'indexe des champs communs aux deux dans celle ci. La grille dans B comporte 20 lignes et, par exemple, le libellé est sur la ligne 2. La grille dans C comporte 10 lignes et le libellé est sur la ligne 5
- Dans B et C j'ai défini des constantes pour définir la position de chaque ligne. Par exemple j'ai une constantes POS_LIBELLE = 2 dans B est une POS_LIBELLE = 5 dans C. Ceci me permet de changer l'ordre de mes lignes selon la demande sans avoir à vérifier tout le code de B et C
J'ai des traitements communs à faire sur B et C (exemple initialiser le libellé). Il serait dommage et inefficace qu'il y ait redondance de code. La logique serait donc de placer le code dans A. Mais comme A ne connaît pas la valeur de POS_LIBELLE il faut que je trouve un moyen de le lui transmettre. Je vois deux moyens :
- Mettre des variables dans la section protected de A et les initialiser dans B et C. Simple mais à mon avis caca car on va initialiser 20 variables à la création de C alors que seules 10 seront nécessaires.
- Je peux créer un accesseur en virtual abstract. Dans A j'appelle l'accesseur qui, déclaré dans la fille, me renverrait la valeur de la constante correcpondant. Ca me semble plus propre mais est-ce le cas ?
Laquelle de ces deux méthodes est à votre avis la meilleur ?
En voyez vous d'autres ?
D'avance merci pour votre aide.
Partager