Los principios SOLID fueron acuñados por Robert C Martin (aka Uncle Bob), una de las leyendas de la ingeniería de software y co-creador del manifiesto Agile.
Las siglas SOLID describen 5 principios básicos para la programación orientada a objetos que sirven de base para la escritura de un código más estructurado y limpio:
- Single Responsibility Principle
- Open / Closed principle
- Liskov Substitution Principle
- Interface Segregation Principle
- Dependency Inversion Principle
Hablemos del principio Single Responsibility en esta ocasión. El principio sostiene que una clase debe tener una y sólo una responsabilidad o un único trabajo, y por tanto una sola razón para ser modificada.
Para comprender este principio, veamos esta clase:
public class User {
public int UserId {get; set;}
public string UserName {get; set;}
public string Email {get; set;}
public string AddressLine1 {get; set;}
public string AddressLine2 {get; set;}
public string City{get; set;}
public bool IsLogin(User user){get; set;}
public User UpdateAddress(User user) {}
}
Podemos observar que esta clase tiene cosas relacionadas con la dirección física del usuario, pero en realidad esta clase User sólo debería encargarse de definir campos que estén relacionadas con la entidad User en si (en este caso el UserName y el Email, ya que esta es una clase base para un sistema de Log In). Por tanto, el principio de Single Responsibility no se cumple ya que esta clase tiene muchas responsabilidades (actualizar la dirección del usuario no está tan relacionada con su habilidad de ingresar al sistema)
Por tanto, para este escenario, lo mejor es que todo lo relacionado a la dirección del usuario se separe en una clase cuya única responsabilidad sea actualizar esa información, en lugar de tenerlo todo en la clase User. Crearemos pues la clase Address para mover todos los parámetros y métodos relacionados con la dirección alli:
public class User {
public int UserId {get; set;}
public string UserName {get; set;}
public string Email {get; set;}
public bool IsLogin(User user) {}
}
public class Address {
public int UserId {get; set;}
public string AddressLine1 {get; set;}
public string AddressLine2 {get; set;}
public string City {get; set}
public User UpdateAddress(Address address) {}
}
Podemos observar en este caso cómo las responsabilidades están correctamente repartidas entre las dos clases, y ambas cumplen el principio de Single Responsibility ya que su scope está acotado a una única entidad (User, Address). Por otro lado, si queremos modificar o adicionar campos o métodos para cada entidad, sólo lo haremos para extender la funcionalidad de esa entidad y no debe afectar el código previamente escrito.
En la siguiente ocasión hablaremos del principio Open / Closed.
Comentarios recientes