Single responsability
El principio de responsabilidad única (SRP) es uno de los cinco principios SOLID de la programación orientada a objetos. Establece que cada clase, módulo o función debe tener una sola responsabilidad. En otras palabras, cada unidad de código debe tener un solo propósito.
Este principio tiene varias ventajas, entre ellas:
- Mejora la mantenibilidad: Si una clase tiene muchas responsabilidades, es más probable que cambie por diferentes razones. Esto puede dificultar el mantenimiento del código, ya que es posible que no se identifiquen todas las dependencias que se verán afectadas por el cambio.
- Mejora la reusabilidad: Las clases con una sola responsabilidad son más fáciles de reutilizar en otros contextos.
- Mejora la flexibilidad: Las clases con una sola responsabilidad son más fáciles de modificar para adaptarse a nuevos requisitos.
Ejemplo 1:
public class Persona {
public string Nombre { get; set; }
public int Edad { get; set; }
public void Trabajar() {
// ...
}
public void Comer() {
// ...
}
}
Esta clase viola el principio SRP, ya que tiene dos responsabilidades: almacenar la información de una persona y realizar tareas.
Una forma de corregir esta violación sería dividir la clase en dos:
public class Persona {
public string Nombre { get; set; }
public int Edad { get; set; }
}
public class PersonaTrabajadora {
public Persona Persona { get; set; }
public void Trabajar() {
// ...
}
}
De esta forma, la clase Persona
solo tiene la responsabilidad de almacenar la información de una persona, mientras que la clase PersonaTrabajadora
tiene la responsabilidad de realizar tareas.
Ejemplo 2:
public class ConexionBD {
public void Conectar() {
// ...
}
public void Consultar() {
// ...
}
public void Actualizar() {
// ...
}
}
Esta clase también viola el principio SRP, ya que tiene tres responsabilidades: conectar con la base de datos, consultar datos y actualizar datos.
Una forma de corregir esta violación sería dividir la clase en tres:
public class ConexionBD {
public void Conectar() {
// ...
}
}
public class ConsultaBD {
public ConexionBD Conexion { get; set; }
public void Consultar() {
// ...
}
}
public class ActualizacionBD {
public ConexionBD Conexion { get; set; }
public void Actualizar() {
// ...
}
}
De esta forma, cada clase tiene una sola responsabilidad.
Ejemplo 3:
public class Controlador {
public void MostrarVista() {
// ...
}
public void ObtenerDatos() {
// ...
}
public void ProcesarDatos() {
// ...
}
}
Esta clase también viola el principio SRP, ya que tiene tres responsabilidades: mostrar una vista, obtener datos y procesar datos.
Una forma de corregir esta violación sería dividir la clase en tres:
public class ControladorVista {
public void MostrarVista() {
// ...
}
}
public class ControladorDatos {
public void ObtenerDatos() {
// ...
}
}
public class ControladorProcesamiento {
public void ProcesarDatos() {
// ...
}
}
De esta forma, cada clase tiene una sola responsabilidad.
Como se puede ver en estos ejemplos, el principio SRP puede aplicarse a cualquier tipo de código, desde clases simples hasta sistemas complejos.