J'ai trouvé beaucoup de messages similaires sur des questions connexes, cette réponse par taylonr est venu près, mais n'a pas tout à fait répondre à mon scénario.Comment puis-je mieux concevoir cela en utilisant les principes OO et SOLID?
Supposons que j'ai une interface:
public interface IShape
{
decimal GetArea();
}
je puis créer 3 classes en utilisant cette interface
public class Rectangle : IShape
{
public decimal GetArea()
{
...
}
}
public class Triangle : IShape
{
public decimal GetArea()
{
...
}
}
public class Circle : IShape
{
public decimal GetArea()
{
...
}
}
Je veux maintenant ajouter une fonction int GetNumberOfSides()
(ou une autre fonction qui ne concerne que certains de mes IShape). Évidemment, ceci n'est pas pertinent pour la classe Circle. Si j'avais alors un objet List<IShape>
et que je souhaitais itérer pour appeler cette fonction sur des IShapes pertinentes, comment utiliseriez-vous les principes de conception orientés objet pour y remédier?
Je pourrais ajouter un booléen à mon interface IShape bool HasSides { get; set; }
et exécuter n'importe quelle logique de ceci, cependant je devrais lancer à une classe spécifique afin d'accéder à une fonction GetNumberOfSides()
. Je sais que ce n'est pas correct, car je ne me sens pas bien, mais je ne suis pas sûr de savoir comment faire.
J'ai pensé à avoir une autre interface ISidedShape
qui a hérité de IShape
, mais ensuite revenir à l'itération de ma liste comment saurais-je laquelle des formes avait cette méthode spécifique?
Toute aide serait grandement appréciée.
Merci
Un 'Circle' ne peut-il simplement renvoyer" 0 "pour le nombre de côtés? Qu'en est-il d'autres formes étranges, comme un demi-cercle? Cela aurait légitimement 1 "côté", ainsi que 1 "autre chose qu'un côté, selon la façon dont vous définissez un côté". Peut-être que "côté" n'est pas le terme que vous recherchez? Avec un nom plus approprié pour le terme, la modélisation pourrait avoir plus de sens. – David
Mon exemple n'a peut-être pas été le meilleur. J'avais du mal à trouver un exemple sans utiliser mon scénario réel qui nécessiterait d'autres connaissances. Je comprends votre point de vue sur le retour 0 mais cela ne me semble pas non plus. – user1244893
Pourquoi ne vous sentez-vous pas bien? C'est parfaitement logique. – jrahhali