1.7 KiB
1.7 KiB
ADR 0008 — External-Reference-Pattern
Status
Accepted
Kurz erklärt
External Reference bedeutet:
Ein internes Objekt merkt sich,
wie es in einem externen System heißt.
Beispiel:
- Kunde im Backoffice
- derselbe Kunde in Lexware
- dieselbe Domain bei 1blu
- derselbe Hostingaccount in KeyHelp
Kontext
Das Architekturreview hat kritisiert, dass konkrete Anbieterfelder wie keyhelp_id oder lexware_id im Core das Adapter-Pattern zerstören würden.
Entscheidung
Hosting-Backoffice verwendet ein generisches External-Reference-Pattern.
Der Core erhält keine Anbieterfelder wie:
keyhelp_id
lexware_id
oneblu_id
Stattdessen gibt es eine generische Referenzstruktur.
Beispielstruktur
external_references
- id
- tenant_id
- owner_type
- owner_id
- provider
- provider_account_id
- external_id
- external_type
- metadata
- last_synced_at
- created_at
- updated_at
Beispiel
owner_type: Domain
owner_id: 123
provider: 1blu
external_id: ABC-987
Oder:
owner_type: Server
owner_id: 55
provider: KeyHelp
external_id: server-user-4711
Begründung
Dieses Pattern sorgt für:
- Providerneutralität
- weniger Core-Abhängigkeiten
- einfachere neue Integrationen
- saubere Migrationen
- bessere Austauschbarkeit von Modulen
Konsequenzen
Positiv
- keine harte Anbieterlogik im Core
- bessere Erweiterbarkeit
- sauberer Wechsel von Anbietern möglich
Negativ
- etwas komplexeres Datenmodell
- Entwickler müssen über Adapter denken
- direkte Fremdschlüssel zu externen Systemen sind nicht erlaubt
Verwandte ADRs
- ADR 0007 — Modul-System
- ADR 0009 — Core-Grenzen
- ADR 0017 — Adapter-Fehlerresilienz