Crear un mòdul en Drupal 10 o 11 part de definir una estructura clara: un directori el teu_modulo / amb arxius com tu_modulo.info.yml, el teu_modulo.routing.yml i classes en src/. Primer identifiques la funcionalitat que vols afegir (per exemple, un formulari personalitzat o un servei d’integració amb una API), i després organitzes la teva lògica en controladors, serveis i plugins. Gràcies al sistema d’injecció de dependències de Drupal (que utilitza Symfony sota el capó), pots separar responsabilitats i reutilitzar codi. No obstant això, per a escalar adequadament i evitar “codi espagueti”, convé aplicar un conjunt de bones pràctiques de disseny: els principis SOLID.
Què sén els principis SOLID?
SOLID és un acrònim que resumeix cinc regles fonamentals del disseny orientat a objectes. Cada lletra correspon a un principi que facilita la llegibilitat, mantenibilidad i extensibilitat del codi.
Principis SOLID
S – Single Responsibility Principle (SRP)
Principi de Responsabilitat Única: cada classe o mòdul ha de tenir una única raó per a canviar. Si un servei gestiona tant l’enviament de correus com la validació de formularis, viola el principi de SRP.
O – Open/Closed Principle (OCP)
Principi d’Obert/Tancat: les entitats de programari (classes, mòduls, funcions) han d’estar obertes a l’extensió però tancades a la modificació. Afegir funcionalitat no ha d’implicar alterar el codi existent.
L – Liskov Substitution Principle (LSP)
Principi de Substitució de Liskov: els objectes d’una classe derivada han de poder substituir als de la seva classe base sense alterar el comportament del programa. És a dir, heretar sense trencar contractes.
I – Interface Segregation Principle (ISP)
Principi de Segregació d’Interfícies: és millor tenir diverses interfícies específiques que una interfície general massa gran. Cada client ha d’implementar només els mètodes que realment utilitza.
D – Dependency Inversion Principle (DIP)
Principi d’Inversió de Dependències: les classes d’alt nivell no han de dependre de classes de baix nivell, sinó d’abstraccions (interfícies). Injectar dependències en lloc de instanciarlas directament.
Aplicant SOLID en mòduls de Drupal
- SRP en serveis Drupal: crea serveis dedicats en your_moduli.services.yml, com MailSender per a correus i DataValidator per a regles de negoci. Cadascun només implementa una responsabilitat.
- OCP amb tags i plugins: defineix una interfície ContentFormatterInterface i registra implementacions com plugins o serveis etiquetats. Així, en afegir un nou formateador, no toques el mòdul basi, només crees una classe nova que implementi la interfície.
- LSP en extensions de plugins: si estens el plugin de camp FormatterBase, respecta el mètode view() i la signatura de retorn. No canviïs paràmetres ni llancis excepcions inesperades, per a garantir que Drupal pugui substituir la teva formateador sense errors.
- ISP per a definicions d’interfície: separa contractes en DataLoaderInterface, DataSaverInterface i DataDeleterInterface. Un servei d’importació de CSV implementa només DataLoaderInterface, sense veure’s forçat a incloure mètodes de guardat o esborrament.
- DIP mitjançant injecció de dependències: en lloc de cridar \Drupal::database() dins de la teva classe, defineix un servei DatabaseClientInterface que implementi la connexió a la base de dades. Després, en el constructor del teu servei, rep DatabaseClientInterface $db. En entorns de proves, pots injectar un codi temporal sense tocar la lògica real.
SOLID com a inversió valuosa
Incorporar SOLID en el desenvolupament de mòduls Drupal 10 o 11 impulsa un codi més net i robust. Gràcies a SRP, OCP, LSP, ISP i DIP, redueixes acoblaments, facilites tests automatitzats i agilitzes la incorporació de noves funcionalitats. Encara que suposa una mica més de disseny a l’inici, l’estalvi en manteniment i la millora en col·laboració fan de SOLID una inversió imprescindible per a qualsevol equip, ja sigui una gran agència o una pyme de 10 treballadors.
