2017-02-14 2 views
3

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?

+0

Sans plus d'informations, je pense qu'il adhère à SRP –

+0

Etes-vous également responsable de la conception de la classe 'BusinessObject', ou est-ce donné? – Calculator

+0

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

Répondre

4

J'ai obtenu les commentaires que le non-respect unique Responsabilité Principe

Votre classe suit le principe de responsabilité unique puisque toutes les méthodes de la classe ont un seul objectif de coût de calcualting.

Ce que votre classe n'adhère pas est le Open-Closed Principe. Vous devez modifier votre classe chaque fois que vous devez introduire un nouveau mécanisme de calcul. Le Open Closed Principe stipule que les classes doivent être ouvertes à l'extension mais fermées à la modification. L'une des façons d'adhérer au OCP dans votre cas est d'utiliser le Strategy Pattern où vous avez une classe pour chaque type de calcul.