← Nieuwste papers
💻 computer science

Benefits of Applying Software Design Patterns to Backend Rust Applications

Dit artikel evalueert empirisch de impact van het toepassen van de typestate- en newtype-designpatronen op productie-Rust backend-applicaties, waarbij wordt vastgesteld dat hoewel typestate de foutloosheid en testbaarheid aanzienlijk verbetert ten koste van de leesbaarheid, het newtype-patroon een hoogwaardig rendement biedt met weinig inspanning door ongeldige runtime-toestanden te voorkomen.

Oorspronkelijke auteurs: Leon Heuer

Gepubliceerd 2026-07-07
📖 5 min leestijd🧠 Diepgaand

Oorspronkelijke auteurs: Leon Heuer

Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer

Stel je voor dat je een complexe machine bouwt, zoals een hoogwaardig koffiezetapparaat. Je wilt dat het snel is, betrouwbaar en gemakkelijk te repareren als er iets misgaat. In de wereld van computersoftware is de taal Rust als een zeer strikte, veiligheidsbewuste ingenieur die weigert iets te bouwen dat later zou kunnen lekken of breken. Maar zelfs met een strikte ingenieur heb je nog steeds een goed blauwdruk nodig om ervoor te zorgen dat de machine gemakkelijk te begrijpen en aan te passen is.

Deze thesis is een studie naar de vraag of het gebruik van specifieke "blauwdrukken" (genaamd Design Patterns) de Rust-software beter maakt. De auteur, Leon Heuer, testte dit door drie echte softwarecomponenten van een Duitse retailer (OTTO) te nemen en deze opnieuw op te bouwen met behulp van twee specifieke blauwdrukken: het Typestate Pattern en het Newtype Pattern.

Hier is een eenvoudige uitsplitsing van wat hij heeft gevonden, met behulp van alledaagse analogieën:

1. Het Probleal: De "Keukengootsteen"-code

Vóór de wijzigingen leek de software op een enorme keukengootsteen waar alles bij elkaar werd gedumpt.

  • Het probleem: Eén enkele functie probeerde alles te doen: controleren of een gebruiker was ingelogd, gegevens ophalen, getallen valideren en resultaten opslaan. Het was lang, verwarrend, en als je één deel veranderde, kon je per ongelgen iets anders ver weg kapotmaken.
  • Het risico: Het was gemakkelijk om fouten te maken, zoals proberen een deur te openen die nog niet ontgrendeld is. De computer zou je niet tegenhouden totdat je het programma daadwerkelijk draaide en het crashte.

2. De Oplossing: Twee Nieuwe Blauwdrukken

Blauwdruk A: De "Newtype" (De ID-badge)

De analogie: Stel je voor dat je een doos met door elkaar gehusselde sleutels hebt. Sommige openen de voordeur, sommige de achterdeur, en sommige zijn alleen decoratief. Als je een "Voordeur-sleutel" aan het "Achterdeur"-slot geeft, gebeurt er niets totdat je hem probeert te gebruiken, en dan zit je vast.
De oplossing: Het Newtype Pattern is als het plakken van een duidelijk label op elke sleutel. Je maakt een speciale "Voordeur-sleutel"-doos. Je kunt niet per ongeluk een "Achterdeur-sleutel" in deze doos stoppen.

  • Wat er gebeurde: De auteur nam ruwe tekst (zoals een reeks cijfers) en wikkelde deze in een speciale "Gevalideerde" doos. Als de tekst niet geldig was, zou de doos niet sluiten.
  • Het resultaat: Dit was een grote overwinning. Het was goedkoop om te doen, maakte de code veel gemakkelijker leesbaar en voorkwam dat ongeldige gegevens het systeem ooit binnenkwamen. Het is als een beveiliger bij de deur die ID-bewijzen controleert voordat iemand naar binnen gaat.

Blauwdruk B: De "Typestate" (De Assemblagelijn)

De analogie: Stel je voor dat je een auto bouwt. Je kunt de auto niet verven voordat je het frame hebt gebouwd, en je kunt de motor er niet in zetten voordat het frame klaar is. In de oude code kon een programmeur per ongeluk proberen het frame te verven voordat het bestond, en de computer zou hen niet tegenhouden totdat de lakbeurt mislukte.
De oplossing: Het Typestate Pattern verandert de code in een strikte assemblagelijn.

  • Stap 1: Je begint met een "Ruw Frame"-status.
  • Stap 2: Je kunt alleen de actie "Bouw Motor" uitvoeren als je een "Ruw Frame" hebt. Zodra je dat doet, verdwijnt het frame en wordt het een "Frame met Motor".
  • Stap 3: Je kunt alleen "Verven" als je een "Frame met Motor" hebt.
  • Het resultaat: De computer voorkomt fysiek dat je dingen in de verkeerde volgorde doet. Als je probeert een frame te verven dat niet bestaat, zal de code zelfs niet compileren (het zal de software niet eens laten bouwen).
  • De afweging: Dit maakt de code ongelooflijk veilig en gemakkelijk te testen, maar het voegt veel "boilerplate" toe (extra schrijfwerk). Het is als het moeten invullen van een formulier voor elke stap van de assemblagelijn. Het is veiliger, maar het vereist meer papierwerk.

3. De Bevindingen: Werkte het?

De auteur testte deze wijzigingen met drie methoden: het draaien van de code om te zien hoe snel het was, het gebruik van geautomatiseerde tools om complexiteit te tellen, en het interviewen van deskundige programmeurs.

  • Snelheid: De wijzigingen verslowden de software niet. Het "extra papierwerk" van de nieuwe blauwdrukken gebeurde zo snel dat de computer het niet eens merkte.
  • Veiligheid (Foutloosheid): Dit verbeterde enorm. De nieuwe blauwdrukken maakten het onmogelijk om "ongeldige staten" te creëren (zoals een auto zonder wielen). Fouten die vroeger optraden terwijl de software draaide, worden nu opgevangen voordat de software zelfs maar gebouwd is.
  • Testen: Het werd veel gemakkelijker om de code te testen. In plaats van de hele grote keukengootsteen te testen, kon je elke kleine stap van de assemblagelijn afzonderlijk testen.
  • Leesbaarheid: Dit was gemengd.
    • De Newtype (ID-badge) maakte zaken duidelijker.
    • De Typestate (Assemblagelijn) maakte zaken veiliger, maar sommige experts vonden dat de extra code het in eerste instantie moeilijker leesbaar maakte. Echter, zod$'t eenmaal het patroon begreep, was het eigenlijk gemakkelijker om de logica te volgen.

4. De Kernconclusie

De studie concludeert dat:

  1. Newtype een "no-brainer" is. Het is een kleine verandering die je grote voordelen biedt in veiligheid en helderheid. Je moet het gebruiken wanneer je data hebt die geldig moet zijn (zoals een e-mailadres of een prijs).
  2. Typestate is krachtig maar zwaar. Het is het beste te gebruiken wanneer je complexe regels hebt waarbij de volgorde van handelingen er erg toe doet (zoals een complex afrekenproces met meerdere stappen). Als het proces eenvoudig en rechtlijnig is, is de extra code het misschien niet waard.

Kortom, het gebruik van deze patronen in Rust is als de upgrade van een rommelige werkplaats naar een fabriek met veiligheidshekken en een strikte assemblagelijn. Het kost wat meer planning vooraf, maar het eindproduct is veel moeilijker kapot te krijgen en veel gemakkelijker te repareren.

Verdrinkt u in papers in uw vakgebied?

Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.

Probeer Digest →