J'ai été récemment affecté à concevoir une classe contenant la logique métier dans une seule méthode publiqueCe cours suit-il le principe de responsabilité unique?
class MyClass
private BusinessObject object;
public BigInteger calculateCost() {
//do calcualation using properties of object
}
}
Calcul effectué dans la méthode calculateCost() est parfaitement bien mais il y a d'autres propriétés d'objet qui peut modifier le calcul de façon est terminé. Donc, sur la base de certaines conditions que je devrais être en mesure d'appliquer une remise, il existe plusieurs conditions que chacun peut changer le calcul est fait.
J'applique l'approche simple en créant des méthodes privées comme ci-dessous
private calculateCost1() {
//using object's properties calculate the cost
}
private calcualteCost2() {
//using object's properties calculate the cost
}
et a appelé ces méthodes de la méthode publique
public BigInteger calculateCost() {
//do calcualation using properties of object
calculateCost1();
calculateCost2();
}
inconvénients de cette conception est que si je dois ajouter supplémentaire méthode de calcul, je vais devoir changer le MyClass mais j'ai eu la rétroaction qu'il ne suit pas le principe de la responsabilité unique. Je crois que la seule responsabilité de la classe est de calculer le coût et après avoir ajouté des méthodes supplémentaires pour calculer le coût différemment en fonction des propriétés de l'objet métier, elle adhère toujours à SRP.
Quelqu'un peut-il s'il vous plaît commentaire pourquoi cette conception ne suit pas SRP si ce n'est pas vraiment?
Sans plus d'informations, je pense qu'il adhère à SRP –
Etes-vous également responsable de la conception de la classe 'BusinessObject', ou est-ce donné? – Calculator
Ou vous le faites là, ou dans d'autres classes et appelez ces classes du coût de calcul. Dans tous les cas, la valeur finale doit être modifiée avant d'être renvoyée. – efekctive