J'essaie actuellement de comprendre les principes SOLID en lisant le livre appelé Practical Object Oriented Design in Ruby
. Le premier principe est la responsabilité unique, la façon dont je comprends ce concept est qu'une classe/méthode ne devrait avoir qu'une responsabilité ou une raison de changer.J'ai besoin d'aide refactoring code pour se conformer au principe de responsabilité unique
Dans le code ci-dessous j'ai une classe Calculer qui est responsable de (4) quatre opérations différentes, add
, subtract
, multiply
et divide
, qui me ne sont pas conformes à la théorie de responsabilité unique.
Quelqu'un peut-il être si gentil et refactoriser la classe suivante d'une manière qui adhère à la Single Responsibility
?
Je sais que cela pourrait être un sujet très opiniâtre, mais j'ai vraiment besoin de mieux comprendre ce concept.
FYI - Pour simplifier, j'utilise uniquement des Ints, ce que je sais que ce n'est pas idéal pour les divisions et les soustractions.
class Calculate{
let num1:Int
let num2:Int
init(firstNum:Int, secondNum:Int){
num1 = firstNum
num2 = secondNum
}
func add()->Int{
let total = num1 + num2
return total
}
func subtract()->Int{
let total = num1 - num2
return total
}
func multiply()->Int{
let total = num1 + num2
return total
}
func divide()->Int{
let total = num1/num2
return total
}
}
let operation = Calculate(firstNum:5 , secondNum:5)
print(operation.divide())
Ceci est certainement conforme à SRP. 'Calculer 'est composé d'une famille d'algorithmes connexes utilisés pour effectuer sa fonction de calcul.Je ne refactoriserais pas ça. –
@Mister Epic - Oh, donc la classe peut avoir autant d'actions (méthodes) que nécessaire tant que ces actions sont liées à ce que la classe fait, dans ce cas puisque l'addition, la soustraction etc., sont considérées comme faisant partie d'un calcul , c'est bon d'être dans la classe 'Calculate', n'est-ce pas? La raison pour laquelle j'étais confus est que les quatre méthodes retournent une valeur et sont exposées au monde extérieur, mais en théorie elles fonctionnent avec les mêmes données (arguments). –