14Teknologi

DRY-princippet

Don't Repeat Yourself: undgå at den samme viden findes i flere, uafhængige kopier, der kan komme ud af sync.

Kort fortalt

DRY betyder Don’t Repeat Yourself. Pointen er ikke blindt at fjerne al kopieret kode, men at undgå, at samme viden vedligeholdes flere steder og divergerer.

Hvad betyder princippet?

Andy Hunt og Dave Thomas formulerede DRY i The Pragmatic Programmer: “Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.”

Gentaget kode er et symptom. Det egentlige problem er duplikeret viden — regler, formater, forretningslogik — som ændres ét sted og glemmes et andet.

Én sandhed, ét sted — så ændringer ikke skal jages gennem systemet.

Et konkret eksempel

En prisregel er hardcodet i frontend, backend og en rapport. Marketing ændrer reglen ét sted; de to andre bliver forkerte. En fælles kilde til reglen fjerner inkonsistensen.

To næsten ens funktioner kopieres. Senere viser det sig, at de burde divergere. Blind DRY-abstraktion skaber her en værre kobling end lidt gentagelse.

Hvornår er princippet nyttigt?

  • Når samme regel findes i flere lag.
  • Når bugfixes skal laves flere steder.
  • Når dokumentation og kode modsiger hinanden.
  • Når man overvejer abstraktion efter gentagelse — ikke før.

Begrænsninger og kritik

“AHA” (Avoid Hasty Abstractions) minder om, at for tidlig DRY kan skabe forkerte koblinger. Gentagelse er nogle gange billigere end en dårlig fælles model.

DRY er et princip om videnskonsistens, ikke et forbud mod alle lignende linjer kode.

Kilder

  1. Andy Hunt & Dave Thomas, The Pragmatic Programmer (1999) — formulering af DRY.
  2. Bemærkning: Senere praksisdiskussion nuancerer, hvornår abstraktion bør vente.
  • 34KISS-princippetHold løsninger så enkle som muligt — kompleksitet bør være begrundet, ikke standard.
  • 54SOLID-principperneFem objektorienterede designprincipper, der sigter mod mere forståelig, fleksibel og vedligeholdelig software.
  • 66YAGNIYou Aren't Gonna Need It: byg ikke funktionalitet, før du faktisk har brug for den.
  • 23Galls lovKomplekse systemer, der virker, er typisk vokset ud af simple systemer, der virkede — de designes sjældent færdige fra scratch.