Has arribat al final. Vas començar aquest curs amb una pregunta aparentment simple — què és un patró de disseny? — i l'acabes havent construït, peça a peça, una plataforma completa de comandes a domicili: PideYa. El que va començar com una configuració global i un notificador de correus és avui, al teu cap, un sistema amb carta componible, checkout orquestrat, comandes amb cicle de vida, repartiment coordinat i fins i tot una versió distribuïda amb les seves sagues i els seus circuit breakers. Aquesta última lliçó no introdueix res de nou: mira enrere per fixar l'essencial, et dona una vara de mesurar per autoavaluar-te, i et proposa els primers 90 dies del camí que segueix.
Contingut
- El viatge complet: PideYa com a mirall
- Les 7 idees-força del curs
- Autoavaluació final: saps X si pots Y
- Pròxims passos: una ruta de 90 dies
- Comiat
El viatge complet: PideYa com a mirall
Cada mòdul del curs va deixar la seva capa a PideYa. Recórrer-les en ordre és recórrer la maduresa de qualsevol dissenyador de programari:
| Mòdul | L'essencial | La seva empremta a PideYa |
|---|---|---|
| 1. Introducció | Un patró és una solució amb nom a un problema recurrent en un context; SOLID com a terra; UML com a pissarra compartida | El vocabulari i els principis amb què jutgem tota la resta |
| 2. Creacionals | Separar el com es crea del com s'usa | ConfiguracioPideYa (i la seva crítica), els notificadors per Factory Method, els mercats Espanya/Mèxic, Comanda.Builder, "repetir la meva última comanda" |
| 3. Estructurals | Compondre objectes en estructures flexibles sense heretar de més | AdaptadorPayPal, la carta com a Composite, els extres com a Decorator, FacanaCheckout, les icones Flyweight del mapa, els proxies d'imatges i permisos |
| 4. Comportament | Repartir responsabilitats i comunicació entre objectes | La cadena de validació, el panell amb undo, les regles de promoció, CentralRepartiment, el cistell amb Memento, els estats de la comanda amb Observer i State, les estratègies d'enviament |
| 5. Aplicació | El patró es tria pel problema, no per catàleg; refactoritzar cap a patrons; els antipatrons aguaiten | El mètode de selecció, els patrons reconeguts a JDK/Spring/Hibernate, la disciplina de Fowler i Kerievsky |
| 6. Avançats | Les mateixes intencions, estirades sobre arquitectures, xarxes i concurrència | PideYa hexagonal amb Repository i DI; després partida en serveis amb API Gateway, Saga, Outbox i idempotència; immutabilitat i virtual threads sota càrrega |
| 7. Recursos | L'aprenentatge continua: llibres, pràctica deliberada i comunitat | La teva biblioteca, el teu pla de pràctica i la teva PideYa real com a projecte personal |
Llegeix-lo de dalt a baix i veuràs la narrativa completa: de la definició de patró al monòlit ben dissenyat, i del monòlit ben dissenyat a la plataforma distribuïda. Aquest ordre no va ser casual: ningú no dissenya bé un sistema distribuït sense haver dissenyat bé abans un objecte.
Les 7 idees-força del curs
Si d'aquí a cinc anys només recordes set frases d'aquest curs, que siguin aquestes:
- Els patrons són intencions, no plantilles. Copiar el diagrama UML de Strategy no és aplicar Strategy; aplicar-lo és reconèixer "aquí hi ha una família d'algorismes intercanviables". Per això el mateix patró cap en tres línies amb lambdes o en cinc classes.
- Composició per sobre d'herència. La lliçó silenciosa darrere de Decorator, Strategy, Bridge i mitja dotzena més: embolicar i delegar dona flexibilitat en temps d'execució; heretar fixa decisions en temps de compilació. Els extres d'un plat de PideYa ho van demostrar millor que qualsevol teoria.
- Espera fins que faci mal. El patró s'introdueix quan el codi ho demana — el tercer
ifsobre el tipus d'enviament, el segon canal de notificació — no el primer dia "per si de cas". La sobreenginyeria és el costat fosc d'aquest catàleg, i la refactorització cap a patrons, el seu antídot. - El nom importa. Dir "això és un Adapter" en una code review transmet en dues paraules un problema, una solució i les seves conseqüències. El vocabulari comú és, en el dia a dia, el benefici més rendible de tot el que has estudiat.
- Programa contra interfícies, no contra implementacions. El principi de 1994 que sosté des del Factory Method fins a la injecció de dependències de Spring i els ports de l'arquitectura hexagonal. Una sola idea, trenta anys de vigència.
- Tot disseny és un trade-off. Cada patró compra flexibilitat pagant indirecció; cada microservei compra autonomia pagant complexitat distribuïda. No existeix la solució bona en abstracte: existeix l'adequada a un context, i el context canvia.
- Els catàlegs creixen, però les intencions romanen. Circuit Breaker és un Proxy que protegeix; API Gateway, una Facade en xarxa; l'Outbox, un problema de consistència amb roba nova. Qui domina les intencions aprèn cada patró nou en minuts — i per això aquest curs et serveix també per als patrons que encara no s'han inventat.
Autoavaluació final: saps X si pots Y
El coneixement de disseny no es mesura recitant definicions sinó fent. Repassa aquesta llista amb honestedat; cada "no" és simplement el teu següent objectiu de pràctica:
| Saps... | ...si pots |
|---|---|
| Què és un patró | Explicar a un company júnior la diferència entre un patró i una llibreria, amb un exemple de cadascun |
| Els creacionals | Justificar per què Comanda.Builder i no un constructor telescòpic ni setters, i quan n'hi hauria prou amb un record |
| Els estructurals | Distingir en codi aliè un Adapter d'un Decorator d'un Proxy, encara que les classes no portin el patró al nom |
| Els de comportament | Modelar el cicle de vida d'una comanda i defensar State davant d'un enum amb switch — i també el cas contrari |
| Triar amb criteri | Rebutjar un patró en una discussió de disseny argumentant el trade-off, no el gust |
| Refactoritzar cap a patrons | Prendre la Gilded Rose (o el teu codi llegat) i fer emergir un patró amb els tests en verd a cada pas |
| Reconèixer patrons en frameworks | Obrir una classe de Spring o del JDK i anomenar dos patrons que conté i per què hi són |
| Els patrons moderns | Explicar quina intenció clàssica hi ha darrere de Circuit Breaker, API Gateway i Repository |
| Comunicar disseny | Escriure un ADR d'una pàgina que un company entengui sense preguntar-te res |
| Continuar aprenent | Anomenar el teu pròxim llibre, la teva pròxima kata i la teva pròxima comunitat — amb dates |
Si n'has marcat la majoria, no "et saps els patrons": penses en patrons, que era l'objectiu real des de la primera lliçó.
Pròxims passos: una ruta de 90 dies
El risc més gran en acabar un curs és el buit de l'endemà. Proposta concreta, ajustable al teu ritme (assumeix 4-6 hores setmanals):
| Dies | Objectiu | Accions concretes |
|---|---|---|
| 1–30 | Consolidar amb les mans | Implementa les etapes 1 i 2 de la teva PideYa real (domini + checkout) amb tests des de l'inici. Comença el teu primer llibre de la ruta triada a 07-01. Fes la Gilded Rose si encara no la vas fer |
| 31–60 | Aprofundir i contrastar | Etapes 3 i 4 de PideYa (cicle de vida + arquitectura hexagonal). Safari de patrons al codi de Spring o Guava. Uneix-te al teu JUG o meetup local i assisteix a una sessió |
| 61–90 | Sortir a la conversa | Escriu dos ADRs de la teva PideYa i demana a algú que els revisi. Primera contribució open source petita o primera resposta a Stack Overflow. Repeteix la kata amb variació. Revisa aquesta autoavaluació i compara amb el dia 1 |
Tres regles perquè el pla sobrevisqui al contacte amb la realitat: cada setmana acaba amb un artefacte (commit, nota, ADR — no només lectura); si una setmana cau, es reprèn sense culpa i sense "començar de zero"; i al dia 90, decideix el següent cicle tu mateix — ja tens el criteri i el mapa de recursos per fer-ho.
Errors Comuns i Consells
- Error: tancar el curs i no escriure codi en un mes. El que s'ha après sense pràctica immediata es degrada ràpid. El pla de 90 dies existeix exactament per a això: comença aquesta setmana, encara que sigui amb una hora.
- Error: convertir-se en l'"evangelista de patrons" de l'equip. Acabat d'aprendre el martell, tot sembla un clau. Recorda el mòdul 5: el millor dissenyador és el que sap quan no aplicar el patró, i el vocabulari serveix per conversar, no per sentenciar.
- Error: mesurar el progrés per contingut consumit. Llibres llegits i vídeos vistos no són la mètrica; la mètrica és la taula d'autoavaluació: què pots fer avui que no podies fa tres mesos.
- Consell: torna a aquest curs com a referència. Les comparatives dels mòduls 2, 3 i 4 i el mètode de selecció del mòdul 5 estan pensats per rellegir-se amb un problema real entre mans — així és com s'usa un catàleg.
- Consell: ensenya el que has après. Una xerrada curta al teu equip sobre tres patrons que vas trobar al vostre codi val més que rellegir tres capítols: explicar és la prova final d'haver comprès.
Exercicis
Exercici 1: La teva autoavaluació amb evidències
Recorre la taula "saps X si pots Y" i, per a cada fila, escriu una evidència real ("ho vaig demostrar quan...") o un "encara no". Amb els "encara no", ordena les teves tres prioritats i assigna cadascuna a un tram del teu pla de 90 dies.
Exercici 2: La carta al teu jo del passat
Escriu mitja pàgina adreçada a la persona que eres abans de la lliçó 01-01: quines tres coses li diries sobre els patrons de disseny per estalviar-li els malentesos més cars. No repeteixis les idees-força literalment; formula-les amb les teves paraules i els teus exemples.
Exercici 3: El compromís de 90 dies
Adapta la ruta de 90 dies a la teva realitat: les teves hores disponibles, el teu nivell segons l'exercici 1 i els teus objectius professionals. Escriu-la amb dates concretes al teu calendari i decideix ara la resposta a la pregunta incòmoda: què faràs la setmana que no compleixis?
Solucions
Exercici 1 (orientativa): una evidència vàlida és concreta i verificable: "Distingeixo Adapter de Decorator: ho vaig demostrar a la comparativa del mòdul 3 i ahir vaig identificar un Decorator a BufferedReader". Un "encara no" típic és l'ADR — pocs n'han escrit mai un — i per això la ruta el col·loca als dies 61-90, quan ja hi ha decisions pròpies de PideYa per documentar.
Exercici 2 (orientativa): les cartes més lúcides solen girar sobre tres avisos: "els patrons no són receptes per aplicar sinó problemes per reconèixer", "no posis el patró el primer dia: espera al segon o tercer cas real" i "aprèn els noms encara que et semblin pedanteria — el dia que diguis 'això demana una Facade' en una reunió i tothom assenteixi, entendràs per a què era tot això". Si la teva carta conté avisos així amb exemples propis, has interioritzat el curs.
Exercici 3 (orientativa): un bon pla personal és més petit que el proposat, no més gran: si només tens 3 hores setmanals, potser PideYa arribi a l'etapa 3 i no a la 4, i la contribució open source passi al següent cicle. La resposta madura a la pregunta incòmoda no és "no fallaré" sinó alguna cosa com: "reprenc el dilluns següent on ho vaig deixar, i si fallo tres setmanes seguides, redueixo el pla a la meitat en lloc d'abandonar-lo".
Conclusió
Fins aquí el curs de Patrons de Disseny de Programari. Va començar amb una definició — una solució amb nom a un problema recurrent en un context — i aquesta definició va anar creixent fins a abastar la carta d'un restaurant, l'undo d'un panell d'administració, el cicle de vida d'una comanda, una arquitectura hexagonal i una saga distribuïda. PideYa va ser el mirall: cada patró va deixar de ser un diagrama tan bon punt va tenir una comanda, un repartidor o un pagament al darrere.
T'emportes tres coses. Un catàleg: els vint-i-tres del GoF i els seus hereus moderns, amb les seves intencions i els seus costos. Un criteri: triar pel problema, esperar fins que faci mal, mesurar sempre el trade-off. I un vocabulari: la capacitat de dir "Adapter", "Strategy" o "Circuit Breaker" i ser entès per qualsevol equip del món. El catàleg es consulta, el criteri s'entrena i el vocabulari es conversa — per això tots tres milloren amb els anys en lloc de caducar.
La resta és pràctica: la teva PideYa real esperant el primer commit, el teu primer llibre de la ruta, la teva comunitat local, els teus 90 dies. Els patrons que encara no existeixen els aprendràs en minuts, perquè les intencions ja les coneixes.
Gràcies per arribar fins al final. Ha estat un plaer dissenyar amb tu. Ara, a escriure codi que valgui la pena llegir.
Curs de Patrons de Disseny de Programari
Mòdul 1: Introducció als Patrons de Disseny
- Què són els Patrons de Disseny?
- Història i Origen dels Patrons de Disseny
- Principis de Disseny: SOLID i Altres Fonaments
- UML Essencial per Entendre Patrons
- Classificació dels Patrons de Disseny
- Avantatges i Desavantatges d'Usar Patrons de Disseny
Mòdul 2: Patrons Creacionals
- Introducció als Patrons Creacionals
- Singleton
- Factory Method
- Abstract Factory
- Builder
- Prototype
- Comparativa i Elecció de Patrons Creacionals
Mòdul 3: Patrons Estructurals
- Introducció als Patrons Estructurals
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
- Comparativa i Elecció de Patrons Estructurals
Mòdul 4: Patrons de Comportament
- Introducció als Patrons de Comportament
- Chain of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
- Comparativa i Elecció de Patrons de Comportament
Mòdul 5: Aplicació de Patrons de Disseny
- Com Seleccionar el Patró Adequat
- Exemples Pràctics d'Ús de Patrons
- Patrons de Disseny en Projectes Reals
- Refactorització Usant Patrons de Disseny
- Antipatrons: Quan els Patrons es Tornen un Problema
Mòdul 6: Patrons de Disseny Avançats
- Patrons de Disseny en Arquitectures Modernes
- Patrons de Disseny en Microserveis
- Patrons de Disseny en Sistemes Distribuïts
- Patrons de Concurrència
- Patrons de Disseny en Desenvolupament Àgil
