Может быть, но не обязательно.
Интерфейс - это не ответственность. Существует очень мощный режим архитектуры, который рассматривает интерфейсы как определяющие роль, которую объект может играть в приложении.
Подумайте, что это значит. У вас может быть класс Person
со всеми видами интерфейсов (давайте использовать соглашение .net для именования)
class Person : IAmAStudent, IDrawSocialSecurity, IAmACitizen {
public SocialSecurityNumber getSocialSecurityNumber() {
return this.ssn;
}
private SocialSecurityNumber ssn;
public Person(SocialSecurityNumber ssn) { this.ssn = ssn; }
}
Очевидно, что это не может нарушать SRP. Очевидно, что у него только одна причина для изменений - если отношения между людьми и номерами социального страхования меняются. Тем не менее, объект реализует множество интерфейсов и играет несколько ролей в приложении.
Теперь, если вы реализуете несколько интерфейсов, которые предоставляют разные функциональные возможности, вы можете нарушать SRP, но это также может быть своего рода требованием к суждению. Принцип единственной ответственности - отличное практическое правило для достижения слабой связи, но это не единственный идеал в городе. Также существует высокая степень согласованности, согласно которой связанный код должен существовать вместе. Эти два понятия принципиально расходятся (хотя часто есть способы добиться хорошего баланса). Таким образом, вы можете сделать разумный выбор в пользу одного над другим и сознательно решить нарушить SRP.
В конечном счете, SRP и все правила SOLID в большей степени направлены на то, чтобы вы думали в соответствии с определенными направлениями, а не на то, чтобы вы каждый раз слепо им следовали.
person
George Mauer
schedule
20.07.2015