2024/12/01 -- Las reglas de Object Calisthenics nos piden encapsular todas las estructuras de datos que representan alguna colección
en objetos. Pero, en contra de lo que nos sugiere el nombre, estos objetos no tienen por qué ser en sí mismos
colecciones. De hecho, no es especialmente recomendable que lo sean.
software-design
php
refactoring
2024/11/27 -- Llevo unos días dando vueltas en la cabeza a una idea que me parece interesante: la de los validadores componibles. Es un poco experimento, un poco juego, aunque no creo que sea algo nuevo en realidad.
software-design
php
typescript
2024/10/09 -- Extender de AggregateRoot contamina el dominio, es mentiroso e incumple SOLID, ¿cómo te quedas?
software-design
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.
software-design
design-patterns
pulpoCon
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.
software-design
pulpoCon
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.
software-design
pulpoCon
2024/06/27 -- ¡Por fin!
hexagonal
books
software-design
2024/05/31 -- El patrón Object Mother nos ayuda a tener ejemplos de objetos en toda la suite de test.
testing
tdd
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.
testing
php
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.
testing
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.
design-patterns
php
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.
design-patterns
2024/05/05 -- Para entender mejor la propuesta de Vertical Slice Architecture vamos a intentar usarla en el desarrollo de una aplicación.
design-patterns
php
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.
design-patterns
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.
php
design-patterns
2024/04/25 -- En memoria de Juan Manuel Garrido
misc
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.
testing
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.
misc
good-practices
2024/02/15 -- Las opciones funcionales son un patrón bastante habitual en Go… que se puede usar también en PHP.
golang
php
2024/02/11 -- Explorando cómo portar la librería Golden a PHP y aprendiendo algunas cosas curiosas.
php
testing
2024/01/28 -- El refactor uplift conditional puede ayudarnos a estructurar mejor un código cuajado de condicionales.
golang
refactoring
2024/01/15 -- Evitar depender directamente del sistema de archivos nos permite construir aplicaciones más fáciles de testear.
golang
good-practices
2024/01/13 -- He iniciado un side project para hacer una librería de snapshot testing en Go.
golang
good-practices
2023/12/27 -- Menos es más. O más es menos.
good-practices
refactoring
typescript
ruby
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.
good-practices
design-patterns
golang
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.
golang
testing
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.
good-practices
ruby
refactoring
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.
good-practices
refactoring
ruby
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.
good-practices
refactoring
ruby
2023/11/23 -- En este artículo voy a saltar directamente de los comandos a los eventos.
design-patterns
2023/11/15 -- En el artículo anterior, presentamos el concepto de Command Bus y construimos uno sencillo para introducirlo
design-patterns
ruby
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.
design-patterns
2023/11/08 -- En un equipo de desarrollo orientado a producto las nuevas prestaciones solo tienen sentido si la usuaria o cliente puede usarlas.
good-practices
design-patterns
hexagonal
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.
testing
golang
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.
testing
good-practices
hexagonal
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.
good-practices
design-patterns
ruby
bdd
hexagonal
2023/09/27 -- Hacerse trampas al solitario para conseguir una vanity metric: la cobertura de tests.
testing
good-practices
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.
design-patterns
oop
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.
good-practices
design-patterns
ruby
bdd
hexagonal
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.
ruby
good-practices
design-patterns
bdd
hexagonal
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.
design-patterns
hexagonal
2023/05/31 -- Con este artículo vamos a finalizar el trabajo de refactorizar el código de Gilded Rose.
refactoring
good-practices
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.
refactoring
good-practices
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.
refactoring
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.
good-practices
refactoring
2023/05/10 -- Ya he tratado anteriormente el patrón Builder en PHP. La mayor parte de las ideas generales siguen siendo válidas.
golang
design-patterns
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.
design-patterns
hexagonal
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.
good-practices
testing
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.
golang
testing
good-practices
refactoring
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.
python
testing
good-practices
refactoring
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.
python
good-practices
oop
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.
python
good-practices
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.
good-practices
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.
good-practices
oop
php
2022/10/12 -- En este artículo reviso algunas cuestiones que se han planteado y exploro algunas líneas de desarrollo que quedaban pendientes.
good-practices
refactoring
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.
good-practices
refactoring
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.
good-practices
refactoring
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.
good-practices
refactoring
2022/10/06 -- Una serie de restricciones que te ayudarán a escribir mejor código. Hoy toca hablar de no usar abreviaturas.
good-practices
refactoring
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.
good-practices
refactoring
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.
good-practices
refactoring
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.
good-practices
refactoring
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.
good-practices
refactoring
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.
good-practices
refactoring
2022/09/23 -- Un repaso a la(s) pirámide(s) de tests y un vistazo al testing minimalista de Sandi Metz.
tdd
testing
good-practices
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.
golang
good-practices
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.
golang
2022/06/18 -- Vamos con la segunda entrega de este diario de aprendizaje de Golang con TDD.
golang
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.
golang
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.
java
good-practices
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.
tdd
good-practices
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.
tdd
testing
refactoring
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.
design-principles
refactoring
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.
tdd
php
bdd
2021/11/24 -- Consideraciones sobre el desarrollo con Behavior Driven Development
tdd
php
bdd
2021/11/20 -- Nuevas iteraciones nos permiten introducir funcionalidad de la que carecía el producto.
tdd
php
bdd
2021/11/14 -- Vamos a trabajar con bugs.
tdd
php
bdd
2021/11/06 -- En esta entrega, veremos cómo completar el segundo y tercer escenario de nuestra feature.
tdd
php
bdd
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.
tdd
php
bdd
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.
tdd
php
bdd
2021/10/06 -- No es frecuente que escriba este tipo de artículos, pero seguro que me viene bien para el futuro.
tips
2021/10/05 -- Cómo modelar propiedades de estado de una entidad y sus transformaciones.
design-patterns
good-practices
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.
design-principles
2021/05/17 -- En este artículo intentaré contar como suelo “entrar” en un proyecto.
testing
good-practices
2021/04/30 -- El patrón Object Mother nos ayuda a tener ejemplos de entidades y value objects coherentes en toda la suite.
testing
tdd
2021/04/29 -- Las clases marcadas como final indican que no pueden ser extendidas. Eso añade un extra de dificultad en ciertos tests.
testing
tdd
2021/04/08 -- O al menos, no de esta manera.
testing
tdd
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.
misc
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.
design-principles
good-practices
2021/01/07 -- Otro libro imprescindible de Sandi Metz, que puedes conseguir en versiones para ruby, php y javascript.
books
design-principles
ruby
php
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.
books
design-principles
ruby
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.
misc
good-practices
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.
books
refactoring
javascript
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.
good-practices
refactoring
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.
php
design-patterns
2020/11/09 -- Artículo transcripción de la charla.
design-patterns
2020/11/05 -- Estas ideas pueden aplicarse tanto al escribir código nuevo como ser usadas como guía para refactoring.
good-practices
refactoring
python
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.
good-practices
refactoring
python
2020/11/05 -- El pasado martes (3/11/2020) hice una charla en el meetup de PHPVigo.
misc
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.
ruby
2020/10/26 -- Artículo que versiona la charla.
legacy
good-practices
2020/10/21 -- Pues aquí estamos, en el trabajo de buscar un nuevo trabajo.
misc
2020/10/18 -- El pasado sábado (17/10/2020) participé en la PEUMConf2020.
misc
2020/09/27 -- Seguimos estirando la kata QuoteBot. Ya que estamos, vamos a intentar llevar esta aplicación a un nuevo nivel.
design-principles
good-practices
refactoring
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.
design-principles
good-practices
refactoring
2020/09/19 -- Todo código en producción es legacy, al final es una cuestión de grado.
design-principles
good-practices
refactoring
2020/09/12 -- Hay mucha vida más allá de los principios SOLID y, sobre todo, mucho antes.
design-principles
good-practices
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.
python
good-practices
2020/08/30 -- Los principios SOLID están sobrevalorados y otras perlas de sabiduría práctica.
design-principles
good-practices
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.
design-principles
good-practices
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.
good-practices
design-principles
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.
python
good-practices
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.
php
bbdd
good-practices
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.
php
bbdd
tools
2020/06/28 -- Las cosas no siempre salen como se planean, ¿cómo reaccionar en un entorno ágil?
python
good-practices
2020/06/27 -- Muchas empresas presumen de su cultura, pero ¿qué es la cultura y cuáles son sus límites?
misc
2020/06/21 -- En este artículo voy a intentar simular el desarrollo durante un sprint.
python
good-practices
2020/06/14 -- Agile debería ser una forma de pensar, un mindset, no una metodología de gestión de proyectos.
python
good-practices
2020/06/13 -- Después de un tiempo con foco en otras tareas, llega el momento de introducir nuevas capacidades en el juego.
python
good-practices
2020/06/07 -- Vamos a seguir mejorando el manejo de textos para tener más agilidad en el futuro.
python
good-practices
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.
python
good-practices
2020/06/06 -- En este artículo vamos a empezar a transformar en profundidad la parte legacy.
python
good-practices
2020/06/04 -- En esta etapa, introducimos conceptos nuevos que nos forzarán a ir desmontando el legacy.
python
good-practices
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.
python
good-practices
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.
python
good-practices
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.
testing
tdd
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:
testing
good-practices
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.
testing
good-practices
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.
good-practices
design-principles
ddd
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.
good-practices
design-principles
ddd
2019/12/14 -- Alien Value Object es una propuesta de patrón para convertir valores entre sistemas.
good-practices
design-principles
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.
good-practices
design-principles
ddd
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.
good-practices
design-principles
ddd
2019/11/21 -- Llevo unas semanas dedicándome a aprender un poco de Swift en ratos libres.
good-practices
design-principles
swift
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.
good-practices
design-principles
ddd
2019/11/08 -- Vamos a comenzar un pequeño proyecto para aprender y profundizar en Domain Driven Design.
good-practices
design-principles
ddd
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.
good-practices
refactoring
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
good-practices
refactoring
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
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.
blogtober19
2019/09/25 -- Un ejemplo sencillo que refleja el proceso de refinamiento iterativo que es escribir software.
tips
refactoring
2019/07/01 -- En este artículo proponemos varios patrones prácticos para crear y utilizar test doubles.
testing
2019/06/24 -- Las cláusulas de guarda nos permiten asegurar que se cumplen las condiciones necesarias para ejecutar un método.
tips
good-practices
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.
testing
2019/06/02 -- En esta entrada vamos a hablar de dobles que no son dobles: los fakes.
testing
2019/05/26 -- En esta continuación hablaremos de los mocks y los spies.
testing
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.
testing
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.
php
testing
tdd
bdd
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.
testing
tips
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.
good-practices
refactoring
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.
good-practices
refactoring
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.
good-practices
testing
2019/03/30 -- En este capítulo veremos refactors basados en la redistribución de responsabilidades.
good-practices
refactoring
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.
testing
soft-skills
ethics
2019/03/23 -- Supongamos que te planteas introducir testing en un proyecto que no lo tiene o que no está suficientemente testeado.
testing
good-practices
2019/03/09 -- Los enumerables son tipos de datos que cuentan con un número finito de valores posibles.
good-practices
refactoring
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.
testing
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.
misc
2019/01/26 -- Nuestro canal formativo favorito nos ha hecho una propuesta que no hemos podido rechazar.
misc
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.
good-practices
refactoring
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.
tdd
testing
2018/12/08 -- La tercera entrega de la guía del refactor cotidiano trata sobre cómo mejorar las estructuras condicionales.
good-practices
refactoring
2018/12/01 -- La segunda entrega de la guía del refactor cotidiano trata de los nombres y cómo mejorarlos.
good-practices
refactoring
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.
misc
testing
tdd
2018/11/24 -- La primera entrega de la guía del refactor cotidiano trata sobre los comentarios.
good-practices
refactoring
2018/11/24 -- Presentamos el primer curso/guía de The Talking Bit.
good-practices
refactoring
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.
bbdd
sql
2018/11/05 -- A booklet with tips to refactor on a daily basis.
refactoring
good-practices
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.
php
testing
good-practices
2018/10/27 -- Here you have some resources to help in testing and tdd workshops. Hope you will find them useful.
tdd
testing
2018/10/25 -- El operador ternario comparte con null coalesce el símbolo de la interrogación, pero ahí se acaba el parecido.
php
tips
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.
testing
soft-skills
ethics
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.
php
bdd
soft-skills
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.
php
bdd
testing
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.
php
bdd
testing
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.
php
bdd
testing
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.
php
bdd
testing
2018/09/09 -- O las aventuras de un junior de 50 años.
misc
soft-skills
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.
php
tips
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.
php
design-principles
good-practices
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.
php
design-principles
good-practices
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.
tools
tips
2018/07/28 -- Cada vez que necesitamos instanciar objetos en una aplicación tenemos que resolver un pequeño problema.
php
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.
tools
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?
php
good-practices
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.
php
good-practices
legacy
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.
php
good-practices
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.
php
testing
tdd
good-practices
2018/05/22 -- Some key concepts explained to know what’s happening when you work with this VCS.
tools
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.
php
good-practices
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.
php
tdd
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.
php
good-practices
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.
tdd
testing
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.
bbdd
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á.
php
tdd
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.
php
design-patterns
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.
testing
php
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.
testing
php
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.
tdd
php
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.
php
good-practices
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.
design-patterns
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.
tools
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.
python
tdd
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).
legacy
refactoring
testing
2018/01/30 -- El code coverage es una métrica que conviene coger con pinzas y examinar con mucho cuidado.
testing
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.
design-principles
php
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.
design-principles
refactoring
php
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.
design-principles
refactoring
php
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.
refactoring
testing
legacy
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.
refactoring
legacy
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.
refactoring
legacy
2017/12/16 -- ¿Qué tal si hablamos de refactor?
refactoring
testing
legacy
2017/12/10 -- Hello (again)
misc
2017/11/30 -- Terminamos con esta serie sobre la disciplina TDD en la que he aprendido un montón de cosas.
tdd
php
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.
tdd
php
2017/11/24 -- Ahora implementaremos pipelining, para encadenar operaciones en una colección.
tdd
php
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!).
tdd
php
2017/11/19 -- Arrays…
tdd
php
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.
design-principles
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.
legacy
refactoring
2017/10/21 -- Los patrones se convierten en anti-patrones si los llevamos más allá de sus límites de aplicabilidad.
legacy
refactoring
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.
soft-skills
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.
legacy
refactoring
2017/09/29 -- El patrón Strategy (estrategia) se basa en encapsular una familia de algoritmos de modo que sean intercambiables.
php
design-patterns
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.
php
design-patterns
2017/08/29 -- Mañana miércoles se cumplen dos semanas de mi nueva etapa profesional.
misc
2017/07/31 -- Llevo un tiempo volviendo a aprender Javascript y estoy empezando a entender este lenguaje. Casi hasta me gusta.
tdd
javascript
2017/07/12 -- Mi historia ha tenido final feliz: a mediados de agosto me incorporo como desarrollador a una empresa genial.
misc
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.
tdd
bdd
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.
tdd
bdd
2017/05/25 -- Continuamos con la kata iniciada en el artículo anterior.
tdd
bdd
2017/05/25 -- Voy a intentar explicar cómo empezar a hacer BDD/TDD con PHPSpec.
tdd
bdd
2017/05/24 -- En esta entrega, voy a empezar a mostrar algo de código de un controlador que maneja una API.
api
2017/05/19 -- Porque todos tenemos spaghetti apestando en el armario.
tdd
testing
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.
misc
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.
api
2017/05/09 -- Las API REST permiten a aplicaciones, servicios y capas de aplicación comunicarse entre sí, independientemente de las tecnologías subyacentes.
api
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.
php
design-patterns
2017/04/28 -- En esta entrega veremos como usar el patrón Abstract Factory para poder tener Specification adecuadas a diferentes capas e implementaciones.
php
design-patterns
2017/04/27 -- El patrón specification es sumamente útil, pero implementarlo tiene su intríngulis. Este artículo tiene tres partes:
php
design-patterns
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.
design-patterns
2017/04/07 -- He aquí una estrategia sencilla para reescribir una clase legacy de manera ordenada, aplicando el principio de Inversión de Dependencia.
design-principles
legacy
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.
bbdd
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.
bbdd
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.
tools
2017/03/20 -- Como añadir autoload a un proyecto sin namespaces.
misc
2017/03/17 -- Este año 2017 tengo como objetivo conseguir un nuevo trabajo como desarrollador PHP y esto es lo que estoy aprendiendo.
misc
2017/03/14 -- Mientras el proceso de reescribir vistas avanza, vamos a darle vueltas a una cuestión importante.
legacy
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.
legacy
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.
legacy
2017/03/05 -- Esta es la segunda parte del relato del proceso que estoy siguiendo para reescribir una aplicación “legacy”.
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.
legacy
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.
php
design-patterns
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á.
php
design-patterns
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.
design-principles
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.
design-principles