Я недавно был назначен создать класс, который содержал бизнес-логику в одном общедоступный методЯвляется ли этот класс Следующим принципом единой ответственности?
class MyClass
private BusinessObject object;
public BigInteger calculateCost() {
//do calcualation using properties of object
}
}
Расчет делается в методе calculateCost (а) совершенно нормально, однако есть и другие свойства объекта, которые могут изменить расчет способ сделанный. Таким образом, исходя из некоторого состояния, я должен иметь возможность применять скидку, есть несколько условий, каждый из которых может изменить расчет.
Поэтому я применил простой подход, создавая частные методы, как ниже
private calculateCost1() {
//using object's properties calculate the cost
}
private calcualteCost2() {
//using object's properties calculate the cost
}
И назвал эти методы из открытого метода
public BigInteger calculateCost() {
//do calcualation using properties of object
calculateCost1();
calculateCost2();
}
Против этой конструкции является то, что если мне нужно добавить дополнительные метод расчета, мне придется изменить MyClass, однако я получил обратную связь, что его не следует принципу единой ответственности. Я считаю, что единственная ответственность класса заключается в том, чтобы рассчитать стоимость и после добавления дополнительных методов для расчета стоимости по-разному, основываясь на свойствах бизнес-объекта, она все еще придерживается SRP.
Может кто-нибудь прокомментировать, почему этот дизайн не соответствует SRP, если это не так?
Без дополнительной информации, я думаю, что он придерживается SRP –
Вы также несете ответственность за разработку класса BusinessObject, или он дается? – Calculator
Или вы делаете это там или в других классах и называете эти классы из расчета стоимости. В любом случае конечное значение необходимо изменить до его возврата. – efekctive