J'ai eu quelques cours comme celui-ci:ajoute cette classe hiérarchiquement un anti-
+---+ +---+
| L | ---uses---> | D |
+---+ +---+
| +---+
inherit ----<---- | V |
| +---+ +---+
+---<--- | C |
+---+
Disons; La classe L
est une classe abstraite, et V
et C
en hérite. Et L
ont une propriété de classe D
. - désolé pour mon mauvais dessin et aussi ANGLAISE
Maintenant, je dois ajouter une nouvelle classe - RA
- qui a une propriété de classe et la classe D
V
devrait avoir une propriété de classe RA
, mais je dois aussi obtenir propriété des objets de la classe L
Donc V
. Dans mon esprit quelque chose comme ceci:
+---+ +---+ +----+
| L | --uses--> | D | <--uses-- | RA |
+---+ +---+ +----+
| +---+ |
inherit ----<----| V | --uses-->--+
| +---+ +---+
+---<---| C |
+---+
Je ne suis pas sûr !; Mais cela me semble être un anti-pattern ou un briseur de LSP - du principe SOLID - en quelque sorte !, mais je ne peux pas le comprendre.
Mon nouveau diagramme est-il un anti-pattern? ou y a-t-il une meilleure façon de concevoir cette situation?
Notez que des classes telles que D
, V
, C
et RA
peuvent être instanciées.
Et je voulais dire que l'utilisation de la propriété de la classe D
est maintenant hiérarchiquement dans la classe V
.
Edit:
Imaginez que j'utilise une interface - IGFP
- qui a retourné une valeur string
en utilisant D
propriété L
donc dans V
et C
, maintenant V
je dois la remplacer en utilisant RA
au lieu de D
.
Dans les classes C# sont:
public abstract class L : VOBase<L>, IGFP {
public virtual D D { get; protected set; }
public virtual string Name { get; protected set; }
public virtual string GFP => $"{D.GFP}/{Name}"; // Here I use D property that I think breaks LSP
}
public class C : L {
public C (D d, string name) {
D = d;
Name = name;
}
}
public class V : L {
public V (RA ra, string name) {
RA = ra;
Name = name;
D = ra.D;
}
public RA RA { get; private set; }
public override string GFP => $"{RA.GFP}/{Name}"; // Here I should override GFP to use RA instead of D
}
public class D : VOBase<D>, IGFP {
public D (U u, string name) {
U = u;
Name = name;
}
public U U { get; private set; }
public string Name { get; private set; }
public string GFP => $"{U.GFP}/{Name}";
}
public class RA : VOBase<RA>, IGFP {
public RA (D d, string name) {
D = d;
Name = name;
}
public D D { get; private set; }
public string Name { get; private set; }
public string GFP => $"{D.GFP}/{Name}";
}
tnx pour votre réponse, je pense que vous voulez dire qu'il n'y a pas d'anti-modèle, je vais ajouter quelques codes ici pour avoir plus de sens;). –
J'ai dit en quelque sorte que: "votre diagramme n'indique aucun anti-pattern" – weston
J'ai fait quelques simplifications, le code vous semble-t-il encore mal? – weston