54Teknologi

SOLID-principperne

Fem objektorienterede designprincipper, der sigter mod mere forståelig, fleksibel og vedligeholdelig software.

Kort fortalt

SOLID er et akronym for fem principper: Single Responsibility, Open–Closed, Liskov Substitution, Interface Segregation og Dependency Inversion. Samlet peger de på designs, der er lettere at ændre uden at knække resten.

Hvad betyder princippet?

Principperne blev populære i objektorienteret softwareudvikling og samlet under navnet SOLID i begyndelsen af 2000’erne. Kort:

  • S — én grund til at ændre en modul/klasse
  • O — åben for udvidelse, lukket for modifikation
  • L — undertyper skal kunne erstatte basistyper uden at bryde forventninger
  • I — mange små interfaces frem for ét “fedt”
  • D — afhæng af abstraktioner, ikke konkrete detaljer

De er designheuristikker, ikke lovgivning.

Gør ændringer lokale. Gør afhængigheder bevidste.

Et konkret eksempel

En klasse både henter data, validerer forretningsregler og renderer PDF. Enhver ændring i rapportering risikerer at knække validering. Opdeling efter ansvar gør ændringer safer og tests klarere.

Et interface tvinger alle klienter til at implementere ti metoder, hvoraf de fleste ikke bruges. Interface segregation foreslår smallere kontrakter.

Hvornår er princippet nyttigt?

  • Når kode er svær at ændre uden sideeffekter.
  • Når man designer moduler og afhængigheder.
  • Når tests er besværlige på grund af tæt kobling.
  • Når man review’er objektorienteret arkitektur.

Begrænsninger og kritik

SOLID kan overdrives til ceremoni og unødvendige lag. Små scripts og simple CRUD-apps behøver ikke fuld enterprise-struktur. Principperne er også formuleret primært i OO-kontekst; andre paradigmer har analoger, men ikke samme bogstavord.

Brug dem til at diagnosticere smerte ved ændring — ikke som checklist for enhver fil.

Kilder

  1. Robert C. Martin m.fl. — formulering af de enkelte principper; Michael Feathers — SOLID-akronymet.
  2. Bemærkning: Principperne er praksisnormer i software engineering, ikke empiriske naturlove.
  • 14DRY-princippetDon't Repeat Yourself: undgå at den samme viden findes i flere, uafhængige kopier, der kan komme ud af sync.
  • 34KISS-princippetHold løsninger så enkle som muligt — kompleksitet bør være begrundet, ikke standard.
  • 39Loven om utætte abstraktionerAlle ikke-trivielle abstraktioner lækker: før eller siden må man forstå lagene under for at fejlsøge eller bruge dem korrekt.
  • 23Galls lovKomplekse systemer, der virker, er typisk vokset ud af simple systemer, der virkede — de designes sjældent færdige fra scratch.