Principio de responsabilidad única
El principio de responsabilidad única es el primer principio del acrónimo SOLID para la programación Orientada a Objetos.
Un módulo o una función debe tener una y solo una responsabilidad, o lo que es lo mismo, debe tener una y solo una razón para cambiar.
Más de una responsabilidad hace que el código sea dificil de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido.
¿Y qué es una responsabilidad?
Se trata de la audiencia de un determinado módulo o función, actores que reclaman cambios al software. Las responsabilidades son básicamente familias de funciones que cumplen las necesidades de dichos actores.
En el siguiente ejemplo podemos identificar hasta 3 responsabilidades diferentes
class Employee
{
public function calculatePay() { … } //Policy
public function save() { … } //Architecture
public function describeEmployee() { … } //Operations
}
- Política de cálculos de salario
- Lógica de persitencia en la base de datos
- Cómputo de horas de trabajo
Cuando alguno de los roles involucrados en dichas responsabilidades decida cambiar o agregar funcionalidad, va a tener que cambiar dicha clase. Aumentando la probabilidad de colisión, complejidad y posibles bugs.
Los dos valores del software
El valor secundario del software, aquel que tendemos a pensar que és el más importante, es el de comportamiento. Si el software se comporta como debería y no posee bugs este valor se mantiene alto.
Por desgracia, las necesidades cambian y los usuarios también, es por eso que el primer valor del software es la facilidad al cambio. Es más importante permitir que el software sea lo suficientemente flexible como para poder adaptarse a nuevos usuarios y necesidades que satisifacerlas en un momento concreto. Sin este valor, el secundario es dificil de acometer a largo plazo.
El principio de reponsabilidad única permite que nuestro código sea más flexible al cambio y por tanto nos ayuda a mantener el primer valor del software, el de la facilidad al cambio, alto.