Ich erstelle eine REST-API, um den größten Teil der Funktionalität einer vorhandenen Java-API verfügbar zu machen. Beide APIs sind für die interne Verwendung in meiner Organisation vorgesehen. Ich muss nicht für den externen Gebrauch designen. Ich habe Einfluss auf beide APIs, implementiere aber die REST-API. Die Java-API wird weiterhin für lokale Anwendungen verwendet (sie wird nicht "zurückgezogen"), die REST-API wird jedoch für wichtige Neuentwicklungen verwendet.
Einige der Java-API-Klassen sind einfach Daten (Beans mit Eigenschaften, Gettern, Setzern). Zumindest einige davon sind sinnvoll (in irgendeiner Form) über die REST-API als Daten zu übertragen (die in XML oder JSON zusammengefasst werden). Beispiel: Eine Klasse, die Informationen zu einem Servercomputer speichert. Ich stehe für diese Datenklassen vor der folgenden Wahl: Muss ich ...
- Machen Sie die ursprüngliche Java-Klasse (oder eine Unterklasse) direkt in der REST-API verfügbar
- Neue Datenübertragungsklasse (DTO-Muster) speziell für die REST-API erstellen?
In beiden Fällen wird es REST-Datenübertragungsklassen geben. Die Frage ist, ob die Originale mit Anmerkungen versehen oder neue erstellt werden sollen (möglicherweise in der Nähe von Kopien der Originale). Es mag andere Möglichkeiten geben, aber ich werde mich hauptsächlich auf diese beiden konzentrieren.
Argumente für # 1:
- DRY (wiederhole dich nicht)
- Schneller zu implementieren
- Einfacheres Upgrade der REST-API
Argumente für # 2:
- Was ist, wenn die REST-API separat von der Java-API versioniert werden muss? (Dies ist etwas wahrscheinlich.)
- Was ist, wenn sich an den Java-Datenklassen wesentliche Änderungen ergeben, z. B. das Entfernen von Eigenschaften, das Hinzufügen von Verhalten oder Änderungen der Klassenhierarchie? (Dies ist auch etwas wahrscheinlich.)
Unterm Strich scheint es ein Kompromiss zwischen TROCKEN (# 1) und Entkopplung (# 2) zu sein.
Ich neige dazu, mit Nummer 1 zu beginnen und dann, wenn Probleme auftreten, später mit Nummer 2 fortzufahren, und folge dabei der agilen Richtlinie, nicht das zu bauen, was man nicht beweisen kann, dass man es braucht. Ist das eine schlechte Idee? soll ich mit # 2 anfangen, wenn ich denke, dass ich trotzdem dort landen kann?
Fehlen in meinen Listen wichtige Argumente / Konsequenzen?