No extiendas de AggregateRoot
2024/10/09 -- Extender de AggregateRoot contamina el dominio, es mentiroso e incumple SOLID, ¿cómo te quedas?
Personal learning journal about programming, maybe more.
2024/10/09 -- Extender de AggregateRoot contamina el dominio, es mentiroso e incumple SOLID, ¿cómo te quedas?
2024/09/19 -- La aplicación ciega de metodologías, principios de diseño o patrones, puede llevarnos a generar más problemas que soluciones. Tomemos por ejemplo, el patrón repositorio.
2024/09/19 -- Los tipos nativos y estructuras de datos ofrecidos por los lenguajes suelen ser insuficientes para modelar los conceptos que nos interesan. Pero además, puesto que tratan de ser genéricos suelen ofrecernos más de lo que necesitamos.
2024/09/19 -- Seguramente conozcas el Principio de Inversión de Dependencias. Sí, ese mismo: la D de SOLID. El que dice que todo debe depender de abstracciones. Pues no vamos a hablar de él como principio, sino de su aplicación práctica.
2024/06/27 -- ¡Por fin!
2024/05/31 -- El patrón Object Mother nos ayuda a tener ejemplos de objetos en toda la suite de test.
2024/05/25 -- Este artículo puede considerarse una continuación del que publicamos sobre reemplazar mocks por implementaciones alternativas. La diferencia es que esta vez, necesitamos simular los problemas, en lugar de los éxitos.
2024/05/17 -- Una de las preguntas sobre TDD outside-in que más me hacen es acerca del uso de los mocks. Al fin y al cabo, acoplan los tests a la implementación y eso no está bien.
2024/05/13 -- Con una feature implementada en el artículo anterior, vamos a introducir una nueva. Es ahora cuando tendremos que enfrentarnos de verdad al desafío que supone Vertical Slice Architecture.
2024/05/10 -- Después de abrir boca con el artículo anterior y tras arreglar algunos problemas que tenía con la configuración de servicios toca seguir profundizando en el desarrollo. Nos vamos al handler.
2024/05/05 -- Para entender mejor la propuesta de Vertical Slice Architecture vamos a intentar usarla en el desarrollo de una aplicación.
2024/05/01 -- En este artículo plasmo mis primeras reflexiones acerca de Vertical Slice Architecture. No trato de hacer una descripción de la propuesta como tal, que tampoco es que esté muy definida que digamos.
2024/04/28 -- A raíz de una pregunta sobre Vertical Slice Architecture estaba intentando empezar a escribir una pequeña aplicación para investigar la propuesta y voy a tratar de documentar el proceso.
2024/04/25 -- En memoria de Juan Manuel Garrido
2024/04/19 -- Mutation testing es una técnica que sirve para analizar la capacidad de una suite de tests para reaccionar ante cambios no deseados del comportamiento del sistema.
2024/03/16 -- La teoría de los limitadores (mi traducción de Theory of Constraints) puede utilizarse como un framework para analizar y mejorar la productividad de un equipo de desarrollo de software.
2024/02/15 -- Las opciones funcionales son un patrón bastante habitual en Go… que se puede usar también en PHP.
2024/02/11 -- Explorando cómo portar la librería Golden a PHP y aprendiendo algunas cosas curiosas.
2024/01/28 -- El refactor uplift conditional puede ayudarnos a estructurar mejor un código cuajado de condicionales.
2024/01/15 -- Evitar depender directamente del sistema de archivos nos permite construir aplicaciones más fáciles de testear.
2024/01/13 -- He iniciado un side project para hacer una librería de snapshot testing en Go.
2023/12/27 -- Menos es más. O más es menos.
2023/12/18 -- Las interfaces en Go pueden ser un poco desconcertantes cuando vienes de otros lenguajes, como Java o PHP, pero es una de las cosas que más me está gustando últimamente.
2023/12/16 -- Llevo tiempo buscando como mejorar los tests que hago en Golang y estos días he descubierto algunas ideas que parecen ir por ese camino.
2023/12/03 -- En las entregas anteriores hemos mencionado varias veces la necesidad de mantener el tiempo de refactoring bajo control, evitando la tentación de llevarlo demasiado lejos.
2023/11/29 -- Segunda entrega de esta serie de introducción al refactoring, si es que no refactorizas. O si quieres impulsar esta práctica en tu equipo.
2023/11/26 -- Me he dado cuenta de que no había escrito nunca un artículo sobre refactoring dirigido a personas que no saben lo que es, o que no lo entienden correctamente.
2023/11/23 -- En este artículo voy a saltar directamente de los comandos a los eventos.
2023/11/15 -- En el artículo anterior, presentamos el concepto de Command Bus y construimos uno sencillo para introducirlo
2023/11/12 -- Hace un tiempo que se me ocurrió la idea de explicar algunos componentes relativamente comunes de las aplicaciones construyéndolos. Y me apetecía hacerlo con los buses de mensajes.
2023/11/08 -- En un equipo de desarrollo orientado a producto las nuevas prestaciones solo tienen sentido si la usuaria o cliente puede usarlas.
2023/10/24 -- Introducir seams o costuras es una de las herramientas que usamos para resolver algunos tests complicados. Un seam es un lugar del código en el que podemos hacer un cambio de comportamiento pero sin modificar el original. Habitualmente, aplicamos esta técnica cuando queremos que la unidad bajo test no haga uso de dependencias que son caras de utilizar en entorno de testing.
2023/10/19 -- Esta es una pregunta que me encuentro con cierta frecuencia desde hace tiempo. Así que he pensado en reunir aquí mis ideas sobre el tema.
2023/10/11 -- Vamos a ver cómo se podría crear un adaptador para un driver port. En este caso, queremos manejar la aplicación desde la línea de comandos.
2023/09/27 -- Hacerse trampas al solitario para conseguir una vanity metric: la cobertura de tests.
2023/08/26 -- Todos los lenguajes de programación nos proporcionan tipos de datos para representar la información en nuestros desarrollos. Sin embargo, no siempre son suficientes.
2023/06/11 -- Algunas correcciones de rumbo antes de proseguir con el desarrollo de la aplicación de gestión de un punto de recogida de paquetes. Quizá no hay mucho de arquitectura hexagonal en este artículo, pero espero que sea útil igualmente.
2023/06/10 -- Para mi intento de explicar como crear una aplicación basada en arquitectura hexagonal, he pensado en reutilizar una prueba técnica que realicé hace algunos años. Eso sí, reconvertida para no desvelar ni la prueba original, ni la empresa.
2023/06/04 -- Antes de pasar a desarrollar un ejemplo de aplicación “Hexagonal”, voy a tratar de responder a algunas dudas comunes que se plantean recurrentemente. O que veo recurrentemente mal respondidas en algunas referencias.
2023/05/31 -- Con este artículo vamos a finalizar el trabajo de refactorizar el código de Gilded Rose.
2023/05/28 -- En el artículo anterior sobre la técnica Uplift conditional comenté que mostraría alguna otra técnica de refactoring alternativa sobre el mismo problema. Esta vez, la propone ni más ni menos que la gran Sandi Metz, aunque le voy a dar un par de twists de mi cosecha.
2023/05/27 -- Aprovechando que al hablar de Approval Test y la técnica Golden Master utilizamos la kata Gilded Rose, vamos a hablar de una técnica muy ingeniosa para reorganizar estructuras condicionales extremadamente intrincadas.
2023/05/14 -- La técnica Golden Master nos puede ayudar a conseguir cobertura de tests rápida en códigos problemáticos, de modo que podamos empezar a refactorizar sin miedo.
2023/05/10 -- Ya he tratado anteriormente el patrón Builder en PHP. La mayor parte de las ideas generales siguen siendo válidas.
2023/04/12 -- Nunca hasta ahora me había atrevido a tocar el tema de la arquitectura hexagonal, pero después de bastantes lecturas, varias charlas y algunas conversaciones, voy a intentar explicarla con mis propias palabras.
2023/03/28 -- Para testear casos de uso es frecuente que utilice dobles de repositorios u otros servicios de almacenamiento. Estos dobles guardan su contenido en memoria durante la ejecución del test y son realmente rápidos. Pero para poder hacer esto, es necesario tener un buen diseño.
2023/03/24 -- Es muy posible que estés trabajando en algún proyecto que necesite manejar fechas u horas, o incluso algo de aleatoridad. Todos los lenguajes incluyen alguna librería estándar para gestionar estos datos. O bien existen paquetes alternativos para responder a ciertas necesidades. Por ahí estamos bien servidas, pero hay un aspecto que con frecuencia pasamos por alto: trabajar con fechas, horas o números aleatorios nos acopla al sistema.
2023/01/22 -- En este artículo tomaré algunos ejemplos del proyecto Dungeon y explicaré cómo mejorar tests usando distintas técnicas y patrones.
2023/01/12 -- Me apetecía volver a abordar algunos temas más teóricos sobre OOP y así romper un poco la monotemática de la serie de Dungeon. Aun así, tomaré algunos ejemplos del juego.
2022/12/16 -- El proyecto Dungeon me está sirviendo para aprender Python más a fondo, así que voy a dedicar algunos artículos a cuestiones específicas que me interesan más allá del proyecto en sí. En esta ocasión hablaré de los decoradores en Python.
2022/11/05 -- El desarrollo de software ágil va más allá de frameworks como Scrum. En realidad, no los necesita. La clave está en entender qué significa ágil.
2022/10/20 -- El problema: como obtener representaciones de un objeto, como DTO, serializaciones, etc., sin exponer getters que únicamente se usarían para esa tarea.
2022/10/12 -- En este artículo reviso algunas cuestiones que se han planteado y exploro algunas líneas de desarrollo que quedaban pendientes.
2022/10/10 -- Una serie de restricciones que te ayudarán a escribir mejor código. La última regla consiste en no usar getters, setters o propiedades públicas.
2022/10/08 -- Una serie de restricciones que te ayudarán a escribir mejor código. Siguiendo con la tónica de mantener pequeños nuestros objetos, ahora solo tendremos dos propiedades como máximo.
2022/10/07 -- Una serie de restricciones que te ayudarán a escribir mejor código. En esta ocasión hablaremos de reducir el tamaño de todas las entidades.
2022/10/06 -- Una serie de restricciones que te ayudarán a escribir mejor código. Hoy toca hablar de no usar abreviaturas.
2022/10/04 -- Una serie de restricciones que te ayudarán a escribir mejor código. En este artículo veremos como aplicar la regla de un solo punto por línea.
2022/10/02 -- Una serie de restricciones que te ayudarán a escribir mejor código. En esta ocasión hablaremos de poner las colecciones en primera clase.
2022/09/30 -- Una serie de restricciones que te ayudarán a escribir mejor código. La tercera entrega trata sobre empaquetar primitivas en objetos.
2022/09/29 -- Una serie de restricciones que te ayudarán a escribir mejor código. En esta ocasión, evitaremos usar la clave ELSE.
2022/09/28 -- Una serie de restricciones que te ayudarán a escribir mejor código. Empezamos por la primera: un sólo nivel de indentación por método.
2022/09/23 -- Un repaso a la(s) pirámide(s) de tests y un vistazo al testing minimalista de Sandi Metz.
2022/09/14 -- El manejo de errores en Golang es uno de los puntos que más me cuesta de este lenguaje. Y, a juzgar por comentarios y artículos, es uno de los puntos que más le cuesta a casi todo el mundo. Y eso que es, aparentemente, sencillo.
2022/09/07 -- Golang es un lenguaje multiparadigma. Puedes trabajar con orientación a objetos y, por tanto, aplicar patrones y principios de este paradigma. Pero a Golang le gusta hacerlo a su manera.
2022/06/18 -- Vamos con la segunda entrega de este diario de aprendizaje de Golang con TDD.
2022/05/29 -- Pues nada, que me ha dado por aprender Golang y para ilustrar algunas de las ideas de este lenguaje he pensado en hacerlo mediante katas de TDD.
2022/04/03 -- Después de haber leído los dos volúmenes de Elegant Objects, tengo un montón de ideas dando vueltas en la cabeza. Así que para darles salida he empezado a dedicar un rato a practicar algunas de las recomendaciones de la obra. O, al menos, intentarlo.
2022/03/31 -- Con cierta frecuencia he escrito sobre katas de código, especialmente de TDD o refactoring, pero creo que puede ser útil un artículo acerca de cómo abordar los ejercicios de código.
2022/02/16 -- Kent Beck es experto en proponer ideas aparentemente sencillas capaces de generar efectos enormes. Hoy hablaremos del flujo Test and Revert or Commit.
2022/01/25 -- No hace mucho dejé caer en twitter que tener métodos de más de 10 líneas me parecía un smell. Por supuesto se levantó cierta polémica y hubo algunas respuestas a favor y en contra.
2021/12/05 -- En esta entrega veremos cómo usar un cliente HTTP de forma que los tests de aceptación sean independientes del código de aplicación.
2021/11/24 -- Consideraciones sobre el desarrollo con Behavior Driven Development
2021/11/20 -- Nuevas iteraciones nos permiten introducir funcionalidad de la que carecía el producto.
2021/11/14 -- Vamos a trabajar con bugs.
2021/11/06 -- En esta entrega, veremos cómo completar el segundo y tercer escenario de nuestra feature.
2021/10/31 -- El segundo escenario de nuestro proyecto de lista de tareas comienza donde dejamos el primero: la lista de tareas está vacía y vamos a añadir la primera de ellas.
2021/10/17 -- Outside-in TDD se ha convertido en mi primera opción para desarrollar nuevas features en los proyectos en los que trabajo. Hasta ahora he estado trabajando únicamente con phpunit, pero estoy preparando una especie de side-project para cambiar el modo en que hago los tests de aceptación.
2021/10/06 -- No es frecuente que escriba este tipo de artículos, pero seguro que me viene bien para el futuro.
2021/10/05 -- Cómo modelar propiedades de estado de una entidad y sus transformaciones.
2021/07/28 -- Edsger W. Dijkstra (1930-2002) es todo un personaje en el campo de las ciencias de la computación, no solo por la cantidad y calidad de sus aportaciones, sino también por su particular carácter y algunas frases lapidarias.
2021/05/17 -- En este artículo intentaré contar como suelo “entrar” en un proyecto.
2021/04/30 -- El patrón Object Mother nos ayuda a tener ejemplos de entidades y value objects coherentes en toda la suite.
2021/04/29 -- Las clases marcadas como final indican que no pueden ser extendidas. Eso añade un extra de dificultad en ciertos tests.
2021/04/08 -- O al menos, no de esta manera.
2021/03/11 -- Hace unos días que lancé el libro “Aprende Test Driven Development”. Aquí tienes todas las opciones para conseguirlo, incluyendo en versión impresa.
2021/01/23 -- De vez en cuando encuentro algunos debates sobre el tema de que es mejor una duplicación que una mala abstracción. Como esta en twitter, por ejemplo.
2021/01/07 -- Otro libro imprescindible de Sandi Metz, que puedes conseguir en versiones para ruby, php y javascript.
2021/01/02 -- Desde que leí este libro no he parado de buscar charlas, libros y otros artículos de la autora. No me había encontrado con una mejor explicación de la orientación a objetos que esta.
2021/01/01 -- De vez en cuando me encuentro con artículos o comentarios que mencionan la idea de que, a veces, tenemos que aparcar las buenas prácticas al programar en aras a cumplir un plazo de entrega o salir a producción.
2020/12/20 -- Habrán pasado unos tres años desde que leí la primera edición de Refactoring. Esta actualización de 2019 ha rejuvenecido el material original, sin perder una pizca de utilidad.
2020/11/20 -- La técnica de las seis preguntas (ó 5 según la fuente) es una especie de framework que se utiliza en algunas disciplinas para determinar si una cierta fuente proporciona una información completa.
2020/11/15 -- O cómo resolver el problema de mover información entre las capas de una aplicación sin violar las leyes de dependencia ni exponer el dominio en infraestructura.
2020/11/09 -- Artículo transcripción de la charla.
2020/11/05 -- Estas ideas pueden aplicarse tanto al escribir código nuevo como ser usadas como guía para refactoring.
2020/11/05 -- Aprovechando el refactor del juego de Pong, vamos a ver más ejemplos de cómo orientarlo para mejorar su solidez y capacidad de cambio futuro.
2020/11/05 -- El pasado martes (3/11/2020) hice una charla en el meetup de PHPVigo.
2020/10/30 -- Hace un tiempo que estoy estudiando algo de Ruby y estoy tratando de encontrar o preparar un entorno de desarrollo sencillo para practicar.
2020/10/26 -- Artículo que versiona la charla.
2020/10/21 -- Pues aquí estamos, en el trabajo de buscar un nuevo trabajo.
2020/10/18 -- El pasado sábado (17/10/2020) participé en la PEUMConf2020.
2020/09/27 -- Seguimos estirando la kata QuoteBot. Ya que estamos, vamos a intentar llevar esta aplicación a un nuevo nivel.
2020/09/22 -- En el artículo anterior el código ha quedado algo mejor estructurado de lo que estaba y, sobre todo, las dependencias están ahora bajo nuestro control. En esta ocasión querríamos avanzar un poco más en esa misma área de organización de código y, sobre todo, conseguir que la capa de domino sea capaz de contarnos la historia acerca de qué trata la aplicación.
2020/09/19 -- Todo código en producción es legacy, al final es una cuestión de grado.
2020/09/12 -- Hay mucha vida más allá de los principios SOLID y, sobre todo, mucho antes.
2020/08/30 -- En esta entrega veremos cómo prevenir las roturas del sprint mediante la organización de las tareas técnicas en la planificación. También hablaremos de las metas o goals de los sprints.
2020/08/30 -- Los principios SOLID están sobrevalorados y otras perlas de sabiduría práctica.
2020/08/15 -- A veces, cuando se habla de principios de diseño de software parece que solo existiesen estos cinco. Así que los repasaremos con un poco de contexto.
2020/08/09 -- Los principios de diseño de software no son recetas ni objetivos, son guías para la toma de decisiones y para la evaluación.
2020/08/05 -- En esta ocasión, hablaremos sobre cómo refinar el backlog como preparación al próximo sprint y también qué pasa cuando nos salimos del plan.
2020/07/27 -- Como xa saberedes, os Value Objects son obxectos do dominio que representan conceptos que nos interesan polo ser valor, son inmutables, non teñen identidade, nin ciclo de vida.
2020/07/27 -- Cuando llega el momento de aplicar cambios a la base de datos siempre me preocupo un poco. Como nuestro ORM y acceso a la base de datos es mediante Doctrine en Symfony utilizamos las migraciones de Doctrine para cualquier actualización del esquema.
2020/06/28 -- Las cosas no siempre salen como se planean, ¿cómo reaccionar en un entorno ágil?
2020/06/27 -- Muchas empresas presumen de su cultura, pero ¿qué es la cultura y cuáles son sus límites?
2020/06/21 -- En este artículo voy a intentar simular el desarrollo durante un sprint.
2020/06/14 -- Agile debería ser una forma de pensar, un mindset, no una metodología de gestión de proyectos.
2020/06/13 -- Después de un tiempo con foco en otras tareas, llega el momento de introducir nuevas capacidades en el juego.
2020/06/07 -- Vamos a seguir mejorando el manejo de textos para tener más agilidad en el futuro.
2020/06/06 -- Ahora que ya hemos estructurado mejor la aplicación, estamos en condiciones de añadir nueva funcionalidad de manera más sencilla.
2020/06/06 -- En este artículo vamos a empezar a transformar en profundidad la parte legacy.
2020/06/04 -- En esta etapa, introducimos conceptos nuevos que nos forzarán a ir desmontando el legacy.
2020/06/01 -- Una mezcla de cosas me ha traído aquí. Este fin de semana he empezado un proyecto para recrear el juego Pong! en Python.
2020/06/01 -- En este primer paso quiero mover el código chusco del prototipo a un objeto App, que será el nuevo punto de entrada de la aplicación. De este modo, el código del prototipo es tratado como legacy, pero puede convivir con la aplicación moderna y no perdemos la funcionalidad mientras mejoramos el código.
2020/03/06 -- Este es un artículo de introducción a Test Driven Development a partir de las “tres leyes” y cómo estas restricciones generan un proceso poderoso para construir software sólido.
2020/02/26 -- Habitualmente no usamos las excepciones en los tests. Como mucho, esperamos que la unidad bajo prueba lance una excepción y ahí se queda todo:
2020/02/07 -- En general, cuando creamos software, confiamos en que haga aquello para lo cual lo hemos programado. Es un poco de Perogrullo, pero es también evidente que necesitamos poder tener esa confianza.
2020/01/03 -- Un caso particular de conocimiento del dominio que suele estar fuera de sitio es el de los repositorios que lo implementan en Infraestructura. En este artículo veremos cómo poner cada cosa en su lugar.
2019/12/17 -- Muchas bases de código que han sido creadas tratando de seguir la metodología DDD se quedan atascadas en ese falso DDD que solemos llamar “directory driven development”, que es básicamente una aplicación de la Arquitectura Hexagonal. Esto es, utilizan la típica distribución de carpetas Domain, Application e Infrastructure, pero el código en ellas está mal organizado y mal distribuido porque en su día no se tenía una comprensión completa de lo que implica Domain Driven Design.
2019/12/14 -- Alien Value Object es una propuesta de patrón para convertir valores entre sistemas.
2019/12/06 -- Acabo de leerme, por fin, El Libro sobre Domain Driven Design de Eric Evans. Después de mucho tiempo leyendo de segunda mano sobre el tema, mi conclusión es: DDD no es exactamente lo que nos han contado.
2019/11/24 -- Creo que una de las cosas que provocan que se haga bola la parte estratégica del DDD tiene que ver con que se trata de una metodología muy orgánica. Es difícil incluso definir un principio y un final del proceso. De hecho, diría que el DDD bien entendido no termina nunca mientras el negocio evoluciona.
2019/11/21 -- Llevo unas semanas dedicándome a aprender un poco de Swift en ratos libres.
2019/11/12 -- Domain Driven Design no puede tomarse como una guía con instrucciones para ir de un punto a otro siguiendo una ruta determinada. Es más bien, un conjunto de estrategias, métodos y tácticas para orientarse en un territorio desconocido y moverse hacia un objetivo deseado que, para mayor dificultad, es móvil.
2019/11/08 -- Vamos a comenzar un pequeño proyecto para aprender y profundizar en Domain Driven Design.
2019/11/03 -- En este artículo presentamos un ejercicio que puede servir para adquirir soltura a la hora de escribir clases más compactas con métodos más expresivos y sencillos de entender.
2019/10/31 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/30 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/29 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/28 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/27 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/26 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/25 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/24 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/23 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/22 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/21 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/20 -- En este artículo presentamos un ejercicio que puede servir para adquirir soltura a la hora de reconocer patrones que nos permitan organizar objetos complejos mediante value objects.
2019/10/20 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/19 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/18 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/17 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/16 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/15 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/14 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/13 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/12 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/11 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/10 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/09 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/08 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/07 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/06 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/05 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/04 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/03 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/02 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/01 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/10/01 -- Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.
2019/09/25 -- Un ejemplo sencillo que refleja el proceso de refinamiento iterativo que es escribir software.
2019/07/01 -- En este artículo proponemos varios patrones prácticos para crear y utilizar test doubles.
2019/06/24 -- Las cláusulas de guarda nos permiten asegurar que se cumplen las condiciones necesarias para ejecutar un método.
2019/06/09 -- Hace algunos meses estuve haciendo análisis sobre la performance de los diversos métodos para crear test doubles y cómo impactan en nuestras suites de tests. Ahora lo he retomado con mejores herramientas.
2019/06/02 -- En esta entrada vamos a hablar de dobles que no son dobles: los fakes.
2019/05/26 -- En esta continuación hablaremos de los mocks y los spies.
2019/05/26 -- Se diría que uno de los puntos más problemáticos a la hora de testear sea, para muchas personas, el utilizar dobles: cuándo usarlos, cómo y un largo etcétera de preguntas. En este artículo voy a proponer una serie de consideraciones para testear con dobles y no sufrir.
2019/05/12 -- Desde hace un tiempo estoy explorando una forma de organizar el código de mis tests, al menos de una parte de ellos. A falta de un nombre mejor he decidido llamar a esta organización testing expresivo.
2019/05/05 -- La Standard PHP Library incluye unas cuantas clases que merece la pena conocer, entre ellas SplFileObject de la cual nos ocupamos en este artículo. Sin embargo, a veces tienen alguna sorpresa oculta.
2019/04/28 -- En anteriores entregas hemos propuesto refactorizar código a Value Objects o aplicar principios como la ley de Demeter o Tell, don’t ask para mover código a un lugar más adecuado. En este capítulo vamos a analizarlo desde un punto de vista más general.
2019/04/14 -- En el blog ya hemos hablado del patrón clásico Single Exit Point y cómo acabó derivando en single return. También algún momento de esta guía de refactor hemos hablado también del return early. Ahora vamos a retomarlos conjuntamente porque seguramente nos los encontraremos más de una vez.
2019/04/05 -- Para ser una disciplina dedicada a que el software se comporte correctamente, lo cierto es que cuando hablamos de testing usamos el lenguaje con muy poca precisión.
2019/03/30 -- En este capítulo veremos refactors basados en la redistribución de responsabilidades.
2019/03/24 -- Artículo sobre antipatrones en el uso de dobles de tests y algunas heurísticas útiles para hacer buenos tests cuando necesitamos dobles.
2019/03/23 -- Supongamos que te planteas introducir testing en un proyecto que no lo tiene o que no está suficientemente testeado.
2019/03/09 -- Los enumerables son tipos de datos que cuentan con un número finito de valores posibles.
2019/02/22 -- Recientemente he comenzado a trabajar en otro proyecto dentro de la empresa ayudando con el testing. Es una parte del negocio que conozco poco todavía y la aplicación con la que estoy trabajando es, por supuesto, distinta, aunque similar en planteamiento.
2019/01/31 -- Hace unos días anunciábamos que el libro Testing y TDD para PHP estaría incluido gratis para los suscriptores de CodelyTV Pro. Ahora, además, si compras el libro tienes un 50% de descuento en el primer mes de suscripción.
2019/01/26 -- Nuestro canal formativo favorito nos ha hecho una propuesta que no hemos podido rechazar.
2019/01/13 -- PHP viene de serie con un conjunto de tipos de datos básicos que denominamos escalares: bool, int, float, string…, que utilizamos para representar cosas y operar con ellas. La parte mala es que son tipos genéricos y, a veces, necesitaríamos algo con más significado.
2018/12/12 -- Una vez que comprendemos el concepto, no es difícil hacer TDD. Pero ese primer paso necesario para arrancar suele necesitar ayuda. Lo mejor es encontrar un ejercicio de programación que sea sencillo sin ser trivial y que ayude a poner de manifiesto los elementos más importantes de la metodología TDD.
2018/12/08 -- La tercera entrega de la guía del refactor cotidiano trata sobre cómo mejorar las estructuras condicionales.
2018/12/01 -- La segunda entrega de la guía del refactor cotidiano trata de los nombres y cómo mejorarlos.
2018/11/25 -- Después de darle vueltas a la idea una temporada hemos agrupado varios artículos del blog sobre testing en un libro.
2018/11/24 -- La primera entrega de la guía del refactor cotidiano trata sobre los comentarios.
2018/11/24 -- Presentamos el primer curso/guía de The Talking Bit.
2018/11/18 -- La normalización de las bases de datos es un proceso que persigue reducir la redundancia de datos y controlar las dependencias entre las entidades representadas en las tablas, de modo que éstas puedan evolucionar fácilmente y se reduzcan los errores que generen inconsistencia de datos.
2018/11/05 -- A booklet with tips to refactor on a daily basis.
2018/11/01 -- Aprovechando que estoy preparando material para organizar formaciones en testing, dejo aquí este resumen de técnicas básicas para seleccionar casos para probar.
2018/10/27 -- Here you have some resources to help in testing and tdd workshops. Hope you will find them useful.
2018/10/25 -- El operador ternario comparte con null coalesce el símbolo de la interrogación, pero ahí se acaba el parecido.
2018/10/15 -- La ética es la rama de la filosofía que se ocupa del “buen vivir”. Pero no en el sentido hedonista que podrías imaginar por la expresión, sino en el sentido de la manera correcta de vivir.
2018/10/09 -- Vamos a cambiar un poco de enfoque antes de continuar con otros aspectos y ejemplos técnicos del Desarrollo Guiado por Comportamiento. Vamos a ocuparnos del BDD como herramienta de comunicación.
2018/10/06 -- Ya llevamos tres capítulos de esta serie sobre BBD en PHP. En el primer artículo de la serie dimos una visión general de BDD y behat. En el segundo y el tercero revisamos el proceso de desarrollo de una Feature desde la historia de usuario hasta tener un código funcional usando la metodología y herramientas BDD.
2018/10/04 -- En el primer artículo de la serie comenzamos introduciendo el concepto de BDD, el lenguaje Gherkin y la herramienta behat. En el segundo, utilizamos PHPSpec para comenzar a desarrollar nuestra feature, partiendo de un Use Case y descubriendo las clases colaboradoras necesarias a medida que identificamos responsabilidades. En esta tercera entrega pretendemos a empezar a unir las piezas.
2018/09/24 -- En el artículo anterior comenzamos introduciendo el concepto de BDD, el lenguaje Gherkin y la herramienta behat. Al final del mismo, nos habíamos quedado con una feature escrita en Gherkin y un test de aceptación vinculado fallando.
2018/09/16 -- Como desarrolladores nos gusta que las historias de usuario que definen nuestros Product Owners estén bien escritas, de modo que podamos implementar lo que se nos pide. Lo mejor de todo es que existe una herramienta conceptual y técnica para lograr eso.
2018/09/09 -- O las aventuras de un junior de 50 años.
2018/09/06 -- Aunque está entre nosotros desde la versión 5.6 de PHP, splat operator es relativamente desconocido y su uso no deja de ser un poco confuso.
2018/09/02 -- Arquitectura es el análisis y diseño de la estructura, organización de los componentes y sus relaciones en un sistema de software.
2018/09/02 -- Pululan por nuestras bases de código como almas en pena, transportando datos de un lugar a otro. Sin embargo, podrían dar esplendor a nuestras aplicaciones si les damos un poco de atención.
2018/08/29 -- De vez en cuando nos puede interesar disponer de un log específico para una parte concreta de una aplicación. Fundamentalmente lo que pretendemos es aislar esos mensajes para poder analizarlos con facilidad.
2018/07/28 -- Cada vez que necesitamos instanciar objetos en una aplicación tenemos que resolver un pequeño problema.
2018/07/22 -- Acabo de desarrollar una pequeña herramienta puede ayudarte a automatizar la creación de tags de versión semántica con git.
2018/06/20 -- ¿Por qué razón poner nombres a las cosas se considera uno de los aspectos más difíciles de la programación?
2018/06/12 -- Refactorizar es más que una tarea técnica. Refactorizar tiene valor de negocio porque su función principal es asegurar que el lenguaje y el conocimiento del negocio están reflejados en el código.
2018/06/05 -- Cómo aplicar el principio de inversión de dependencias, entendiendo qué es dependencia y qué acoplamiento. ¡Ah! Y cómo saber cuándo necesitamos usar inyección o instanciación al crear objetos.
2018/06/03 -- Algunas estrategias con las que intento que mis tests sean cada vez más limpios y legibles y, por tanto, más capaces de comunicar lo que hace el software que escribo.
2018/05/22 -- Some key concepts explained to know what’s happening when you work with this VCS.
2018/05/09 -- If/then es una de las estructuras de control básicas de la programación, pero su abuso puede multiplicar la complejidad de un algoritmo y la dificultad de mantenerlo. En este artículo exploraremos alguna estrategias para usar los if con cabeza.
2018/05/01 -- Hay validadores de NIF a espuertas, pero escribir uno con TDD resulta ser un interesante ejercicio con el que desarrollar algunas estrategias de test.
2018/05/01 -- Al hablar de código expresivo queremos decir no solo que el código debería indicar con claridad su intención, también queremos que el código revele más cosas de sí mismo.
2018/04/25 -- Mi primer contacto con los tests, con el propio concepto de test para ser precisos, fue de todo menos una epifanía.
2018/04/16 -- Este es un artículo rescatado del olvido. Lo escribí en 2010, como forma de aprender el funcionamiento de las uniones de tablas en SQL.
2018/04/14 -- ¿Cómo testear lo que no podemos predecir? En muchos sentidos los tests se basan en que el comportamiento del código es predecible: si hacemos ciertas operaciones con ciertos datos podemos esperar ciertos resultados y no otros. Pero esto no siempre se cumple, a veces tenemos que testear algo que no sabemos qué será.
2018/04/02 -- Estos últimos días he trabajado bastante con el patrón Builder, así que toca escribir algo sobre su utilidad para la creación de objetos complicados.
2018/04/01 -- Los principios de diseño están muy relacionados con el testing de tal forma que son tanto objetivo de diseño como herramienta para lograrlo.
2018/03/22 -- Estaba pensando en comenzar el artículo con la manida metáfora de los test doubles como especialistas de cine, los que doblan a los actores en ciertas escenas, no necesariamente peligrosas. Pero cuando más vueltas le doy, menos claro tengo que sea un buen símil.
2018/03/11 -- Ya han pasado más de siete meses desde que llegué a Barcelona, acabo de cumplir mis dos primeras semanas en una nueva empresa y estoy muy contento en mi nuevo equipo, con quienes ya he empezado a aprender un montón de cosas y, de paso, desoxidarme un poco.
2018/02/22 -- Las excepciones son elementos del lenguaje que nos permiten indicar situaciones que rompen el flujo normal de un programa. Cuando se lanza una excepción, ésta asciende la pila de llamadas del lenguaje hasta encontrar algún punto en que sea gestionada. Si no lo encuentra, el flujo del programa se detiene y se muestra un error.
2018/02/19 -- El patrón decorador tiene como objetivo permitirnos modificar el comportamiento de un objeto en tiempo de ejecución, esto es, de manera dinámica.
2018/02/19 -- Si trabajas con un buen IDE puede que te quedes con la sensación de que no necesitas nada más, pero todo ayuda.
2018/02/08 -- Hoy voy a hacer un experimento interesante: una kata en Pyhton. Llevo una temporada jugueteando un poco con el lenguaje y he podido probar algunas cosillas.
2018/02/06 -- Hace unos días subí al repositorio una versión para PHP de la Quotebot Kata, un ejercicio propuesto por Cyrille Martraire en el que se presenta un código que inicialmente es imposible de testear (y prácticamente de ejecutar en tu local).
2018/01/30 -- El code coverage es una métrica que conviene coger con pinzas y examinar con mucho cuidado.
2018/01/28 -- La validación es el proceso mediante el cual nos aseguramos de que los datos introducidos al sistema cumplen ciertas condiciones necesarias para poder utilizarlos sin peligro, sin provocar errores, y con la posibilidad de proporcionar resultados, al mantenerse dentro de los límites de tolerancia de los algoritmos que los emplean.
2018/01/15 -- Este artículo es una continuación del anterior sobre Código mentiroso, y en él tocaremos algunos problemas derivados del uso insuficiente de las posibilidades expresivas del lenguaje.
2018/01/07 -- En esencia, el código mentiroso es todo código que dice que hace algo, pero en realidad no lo hace, o hace algo diferente, o desvía nuestra atención de algo que deberíamos saber.
2018/01/05 -- En el artículo anterior quedaron pendientes algunos refactors en nuestro proyecto. En esta entrega mi intención es tratar de rematarlos, así como hacer alguna reflexión sobre los resultados obtenidos y sus consecuencias.
2017/12/27 -- En el artículo anterior colé un error en la estrategia de refactoring y, antes de continuar, voy a detenerme en ese problema porque es realmente interesante.
2017/12/17 -- Una vez que hemos conseguido describir con tests el comportamiento del método que nos interesa, llega el momento de refactorizar. Queremos cambiar la implementación, pero no alterar el comportamiento público del método. Por lo tanto, los tests han de permanecer en verde tras cada cambio, procurando que la fase roja dure lo menos posible, lo que implica realizar baby-steps y no grandes refactors de una sentada.
2017/12/16 -- ¿Qué tal si hablamos de refactor?
2017/12/10 -- Hello (again)
2017/11/30 -- Terminamos con esta serie sobre la disciplina TDD en la que he aprendido un montón de cosas.
2017/11/25 -- Con lo pequeñita que es la clase Collection y está dando para un montón de artículos. En esta cuarta entrega voy a intentar desarrollar el método filter, el cual también nos dará un punto de partida para otros métodos.
2017/11/24 -- Ahora implementaremos pipelining, para encadenar operaciones en una colección.
2017/11/21 -- Ahora que tenemos una clase Collection a la que podemos añadir objetos de un tipo determinado o sus descendientes, vamos a desarrollar algo de comportamiento. Al fin y al cabo, queremos nuestras colecciones para hacer algo con sus elementos, no solo para admirarlas… (ejem!).
2017/11/19 -- Arrays…
2017/11/12 -- El último artículo me dejó con un poco de mal sabor de boca porque la solución propuesta al problema de tratar casos especiales en una colección de objetos que estábamos construyendo a partir de datos obtenidos de una API externa cojea en algún punto.
2017/11/09 -- A veces tenemos que hacer cosas específicamente con algunos objetos de una colección. En este artículo planteo una forma de encarar este problema.
2017/10/21 -- Los patrones se convierten en anti-patrones si los llevamos más allá de sus límites de aplicabilidad.
2017/10/12 -- Tuve la suerte de asistir a la Vª Software Craftmanship de Barcelona, encuentro en el que he disfrutado y aprendido mucho y de dónde he podido sacar unas cuantas ideas interesantes.
2017/10/01 -- Hace unos días trabajamos en una de esas historias que mola porque puedes reducir un poco de legacy code y refactorizar, contribuyendo a mejorar la calidad del código y su extensibilidad futura.
2017/09/29 -- El patrón Strategy (estrategia) se basa en encapsular una familia de algoritmos de modo que sean intercambiables.
2017/09/01 -- Existen una serie de patrones de diseño de sóftware básicos, pero nada nos impide crear nuevos patrones a partir de alguno de los clásicos, con el fin de adaptarlos a situaciones más específicas. Sencillamente, son patrones menos generales.
2017/08/29 -- Mañana miércoles se cumplen dos semanas de mi nueva etapa profesional.
2017/07/31 -- Llevo un tiempo volviendo a aprender Javascript y estoy empezando a entender este lenguaje. Casi hasta me gusta.
2017/07/12 -- Mi historia ha tenido final feliz: a mediados de agosto me incorporo como desarrollador a una empresa genial.
2017/05/29 -- En las entregas anteriores de la serie he tratado de explicar cómo hacer TDD usando PHPSpec. En esta última, voy a mostrar cómo dar un “salto” en el desarrollo, usando los test existentes como protección.
2017/05/26 -- En esta tercera entrega, vamos a examinar cómo los nuevos requisitos nos pueden llevar a refactorizar una solución existente y discutiremos lo que define la sobreingeniería.
2017/05/25 -- Continuamos con la kata iniciada en el artículo anterior.
2017/05/25 -- Voy a intentar explicar cómo empezar a hacer BDD/TDD con PHPSpec.
2017/05/24 -- En esta entrega, voy a empezar a mostrar algo de código de un controlador que maneja una API.
2017/05/19 -- Porque todos tenemos spaghetti apestando en el armario.
2017/05/16 -- Nadie dijo que encontrar trabajo como desarrollador PHP fuese fácil, mucho menos a los 49 años y con un perfil atípico. Pero hay rechazos que duelen especialmente.
2017/05/14 -- Voy a hacer un ejemplo de controlador que responde a peticiones por API Rest distribuido en varias entregas. Me voy a limitar a lo más básico y en futuros artículos iré añadiendo los elementos de seguridad, etc. En la primera parte, quiero centrarme en la parte de diseño.
2017/05/09 -- Las API REST permiten a aplicaciones, servicios y capas de aplicación comunicarse entre sí, independientemente de las tecnologías subyacentes.
2017/04/30 -- En las entregas anteriores hemos hablado del patrón Specification y cómo implementarlo en las diversas capas de arquitectura con la ayuda de Abstract Factory. Ahora toca ver cómo combinar Specification mediante el patrón Composite para construir especificaciones complejas a partir de otras más simples.
2017/04/28 -- En esta entrega veremos como usar el patrón Abstract Factory para poder tener Specification adecuadas a diferentes capas e implementaciones.
2017/04/27 -- El patrón specification es sumamente útil, pero implementarlo tiene su intríngulis. Este artículo tiene tres partes:
2017/04/23 -- En los últimos días he estado trabajando ya en módulos específicos de la aplicación. En concreto la parte del CMS por ser la más visible y conceptualmente bastante sencilla. Así puedo hacer algunos experimentos interesantes en la separación de responsabilidades entre capas.
2017/04/07 -- He aquí una estrategia sencilla para reescribir una clase legacy de manera ordenada, aplicando el principio de Inversión de Dependencia.
2017/04/06 -- Cuando hablamos de Doctrine casi siempre pensamos en su ORM. Sin embargo, su capa de acceso a la base de datos es una gran herramienta poco conocida, de la que hay poca información aparte de la documentación oficial.
2017/04/03 -- Database-first: al principio puede parecer fácil y hasta lógico. Es como el reverso tenebroso de la Fuerza, pero con datos.
2017/03/27 -- Trabajar de forma individual hace que, a veces, descuides aspectos del flujo de trabajo que son cruciales en equipos. Uno de estos aspectos es la gestión de versiones y la ramificación de proyectos.
2017/03/20 -- Como añadir autoload a un proyecto sin namespaces.
2017/03/17 -- Este año 2017 tengo como objetivo conseguir un nuevo trabajo como desarrollador PHP y esto es lo que estoy aprendiendo.
2017/03/14 -- Mientras el proceso de reescribir vistas avanza, vamos a darle vueltas a una cuestión importante.
2017/03/12 -- A medida que la primera fase del proyecto avanza voy observando cosas en las que habrá que trabajar más a fondo.
2017/03/07 -- Cuando analizas tu código antiguo es casi como analizar el código de otro desarrollador. En realidad es un poco peor, porque sabes que tú eres el responsable de esa masa de lodo. Esta es la tercera entrega de una serie sobre mi proyecto para abordar una aplicación legacy.
2017/03/05 -- Esta es la segunda parte del relato del proceso que estoy siguiendo para reescribir una aplicación “legacy”.
2017/03/04 -- Hace unos 15 años comencé a escribir mi primera aplicación seria en PHP. Esta aplicación fue creciendo y sufriendo diversos cambios y prestaciones. Ahora ha llegado el momento de replantearla.
2016/12/22 -- El patrón visitante es uno de los que más difícil me ha resultado entender y aplicar, así que voy a escribir sobre él para afianzar el concepto.
2016/12/05 -- El patrón Cadena de Responsabilidad (Chain of Responsibility) nos permite manejar una petición que puede ser atendida por varios objetos, sin saber a priori cuál de ellos lo hará.
2016/11/29 -- Los principios SOLID son cinco principios en el diseño orientado a objetos compilados por Robert C. Martin, aunque quien primero se refirió a ellos con este nombre fue Michael Feathers. Martin los tomó como base para sus trabajos “Clean Code” y “Clean Architecture” y les dio la formulación más conocida.
2016/11/29 -- En Programación Orientada a Objetos el polimorfismo es una característica que nos permite enviar el mismo mensaje, desde el punto de vista sintáctico, a distintos objetos para que cada uno de ellos lo realice con un comportamiento específico.