98 lines
1.7 KiB
Markdown
98 lines
1.7 KiB
Markdown
# ADR 0008 — External-Reference-Pattern
|
|
|
|
## Status
|
|
Accepted
|
|
|
|
## Kurz erklärt
|
|
External Reference bedeutet:
|
|
|
|
```text
|
|
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:
|
|
|
|
```text
|
|
keyhelp_id
|
|
lexware_id
|
|
oneblu_id
|
|
```
|
|
|
|
Stattdessen gibt es eine generische Referenzstruktur.
|
|
|
|
## Beispielstruktur
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
owner_type: Domain
|
|
owner_id: 123
|
|
provider: 1blu
|
|
external_id: ABC-987
|
|
```
|
|
|
|
Oder:
|
|
|
|
```text
|
|
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
|