Może, ale niekoniecznie.
Interfejs nie jest odpowiedzialny. There's a very powerful mode of architecture, który wyświetla interfejsy definiujące obiekt, który może odtwarzać obiekt w aplikacji.
Pomyśl o tym, co to oznacza. Można mieć Person
klasę ze wszystkimi rodzajami interfejsów (użyjmy konwencję nazewnictwa dla .net)
class Person : IAmAStudent, IDrawSocialSecurity, IAmACitizen {
public SocialSecurityNumber getSocialSecurityNumber() {
return this.ssn;
}
private SocialSecurityNumber ssn;
public Person(SocialSecurityNumber ssn) { this.ssn = ssn; }
}
Teraz oczywiście nie może to naruszać SRP. Wyraźnie ma on jeden numer tylko jeden powód zmiany - jeśli zmienia się relacja między ludźmi a numerami ubezpieczenia społecznego. Jednak obiekt implementuje wiele interfejsów i odgrywa kilka ról w aplikacji.
Teraz, jeśli implementujesz wiele interfejsów, które eksponują różne funkcje możesz naruszać SRP, ale może to być również trochę osądu, jak również. Zasada odpowiedzialności pojedynczej jest świetną zasadą dla osiągnięcia luźnego sprzężenia, ale nie jest to jedyny ideał w mieście. Istnieje również wysoka spójność, która stwierdza, że powiązany kod powinien żyć razem. Obaj są zasadniczo w sprzeczności (choć często istnieją sposoby na osiągnięcie dobrej równowagi).Więc możesz rozsądnie dokonać wyboru w kierunku jednego nad drugim i świadomie zdecydować się na naruszenie SRP.
Ostatecznie, SRP i wszystkie reguły SOLID bardziej skupiają się na tym, aby myśleć pewnymi liniami, a nie, że ślepo za nimi podążasz.
Nie, jeśli ta pojedyncza odpowiedzialność wymaga wdrożenia wielu interfejsów. – oldrinb