lunes, 4 de abril de 2016

Buenas prácticas de programación:

Principios de diseño SOLID - Liskov Substitution (4/6)
Es turno de hablar del tercer elemento dentro de los principios de diseño SOLID: Lisvov Substitution Principle (LSP).

Este es uno de los principios de diseño que causa más problemas para poder entender el concepto inicialmente, ya que establece: "Las entidades en un programa deberían ser reemplazables con objetos de sus subclases sin alterar el funcionamiento del programa". Esto en pocas palabras es: Si tienes una interfaz IAnimal que implementa un método Respirar() y decides implementar la interfaz para una clase llamada Amoeba y dentro de la implementación devuelves una excepción DeHechoNoRespiroException entonces no estás cumpliendo el principio de diseño señalado.


Un ejemplo de este principio aplicado en la vida real son los tipos de datos que devuelven los actions en MVC:
La interfaz que define el comportamiento de estos objetos es IHttpActionResult y la clase que implementa ésta interfaz es ActionResult. Pero en la vida real hay distintos tipos de clases que hereda de ActionResult y que definen lo que nuestro Action realmente va a devolver: JsonResult, FileResult, ViewResult y podemos intercambiar de forma indiferente el tipo de dato sin que nuestra aplicación truene:



En el ejemplo vemos que se cambia el tipo de dato devuelto de Task<ActionResult> a Task<FileResult>