Preislogik konsolidiert

Von zwölf Skripten zu einem Modul – abgesichert durch Tests, eingeführt im laufenden Betrieb.

Preislogik konsolidiert

Ausgangslage

Über die Jahre war die Preislogik für mehrere Shops in getrennten Skripten gewachsen. Viele Regeln ähnelten sich, unterschieden sich aber im Detail. Wer etwas ändern wollte, musste an mehreren Stellen drehen – mit dem Gefühl, stets eine Abzweigung zu übersehen. Tests gab es nur punktuell.

Weg zur gemeinsamen Logik

Der erste Schritt war, das bestehende Verhalten festzuhalten, bevor wir es anfassen: Black-box-Tests für die kritischen Pfade, bis die Vielfalt der Fälle abgedeckt war. Danach ließ sich eine öffentliche Schnittstelle definieren, die das Wesentliche ausdrückt: Eingaben klar benannt, Ausgaben eindeutig, keine Seiteneffekte. Auf dieser Basis entstand ein Modul, das die Regeln zentral bündelt; Unterschiede zwischen Shops wandern in Konfigurationsdateien statt in neue Code-Forks.

Konfiguration statt Code-Forks (vereinfacht)
# defaults.yaml
price_rules:
  rounding: bankers
  vat: 19
  promo:
    allow_stacking: false

# shop-fr.yaml (nur Abweichungen)
vat: 20
promo:
  allow_stacking: true

Qualität & Betrieb

Die Tests sind das Sicherheitsnetz – über zweihundert Fälle, die die vorherigen Varianten abdecken. Für die tägliche Arbeit heißt das: Code-Reviews konzentrieren sich auf Regeln, nicht auf Dateisuche. Eingeführt wurde das Modul schrittweise: zunächst als Shadow-Run, dessen Ergebnisse wir mit der Altlogik verglichen haben; danach die Umschaltung je Shop, mit Rückfalloption im Rücken.

Was heute anders ist

Die Preislogik liegt an einem Ort und ist über eine stabile API greifbar. Neue Anforderungen lassen sich als Konfiguration ergänzen, ohne Kopien anzulegen. Änderungen bleiben nachvollziehbar – in Tests, im Review und im Betrieb.

Kurzinfo

Dauer

ca. 6 Wochen (inkl. Tests & Rollout)

Rolle

Backend/Refactoring, enge Abstimmung mit Fachseite

Werkzeuge

Perl 5, Test::More, Devel::Cover, YAML::XS, Git (CI)