Quizás, pero no necesariamente.
Una interfaz no es una responsabilidad. There's a very powerful mode of architecture que ve las interfaces como la definición del rol que el objeto puede reproducir en la aplicación.
Piense en lo que eso significa. Puede tener una clase Person
con todo tipo de interfaces de (vamos a usar una convención para nombrar .net)
class Person : IAmAStudent, IDrawSocialSecurity, IAmACitizen {
public SocialSecurityNumber getSocialSecurityNumber() {
return this.ssn;
}
private SocialSecurityNumber ssn;
public Person(SocialSecurityNumber ssn) { this.ssn = ssn; }
}
Ahora, obviamente esto no se puede violar SRP. Claramente tiene una sola razón para el cambio - si la relación entre las personas y los números de la seguridad social cambia. Sin embargo, el objeto implementa muchas interfaces y juega varios roles en la aplicación.
Ahora, si está implementando varias interfaces que exponen diferentes funcionalidades de, es posible que esté violando SRP, pero eso también puede ser un poco crítico. El Principio de Responsabilidad Individual es una gran regla general para lograr un acoplamiento flexible, pero ese no es el único ideal en la ciudad. También hay alta cohesión que indica que el código relacionado debe vivir juntos. Los dos están fundamentalmente en desacuerdo (aunque a menudo hay maneras de lograr un buen equilibrio).Por lo tanto, es razonable tomar una decisión en la dirección de uno sobre otro y decidir conscientemente violar SRP.
En última instancia, SRP y todas las reglas SÓLIDAS son más sobre asegurarse de pensar en ciertas líneas, no que las siga ciegamente cada vez.
No si esa sola responsabilidad lo requiere implementar múltiples interfaces. – oldrinb