Angenommen, Sie schreiben eine App in Java .
Ihre App kommuniziert mit einem in Python geschriebenen API-Server .
Der Python-Server kommuniziert mit einer SQL- Datenbank.
Sie haben auch eine Website für Ihre App in JavaScript geschrieben .
Mit 4 verschiedenen Sprachen ist es einfach, im Wesentlichen die gleichen Datenstrukturen zu 4 verschiedenen Zeiten zu wiederholen.
Ein User
Typ könnte beispielsweise so aussehen (Pseudocode):
type User {
integer id;
string name;
timestamp birthday;
}
Für jeden Teil des Projekts wäre eine Art Vertretung erforderlich User
. Die Java- und Python-Teile benötigen zwei verschiedene class
Deklarationen. Die Datenbank würde eine User
Tabellendeklaration benötigen . Und die Front-End-Site müsste auch eine darstellen User
.
Das Wiederholen dieses Typs zu 4 verschiedenen Zeiten verstößt wirklich gegen das Don't-Repeat-Yourself- Prinzip. Es gibt auch das Problem, dass User
diese Änderungen in jedem Teil des Projekts wiederholt werden müssen , wenn der Typ geändert wird.
Ich weiß, dass die Protobuf- Bibliothek von Google eine Art Lösung für dieses Problem bietet, bei der Sie eine Datenstruktur mit einer speziellen Syntax schreiben und die Bibliothek dann eine Strukturdeklaration für Sie in mehreren verschiedenen Programmiersprachen generiert. Damit ist das Problem der Wiederholung der Validierungslogik für Ihre Typen jedoch noch immer nicht gelöst.
Hat jemand Vorschläge oder Links zu Büchern / Blogposts darüber?
Repeating this type 4 different times really breaks the Don't-Repeat-Yourself principle
. Nicht, tut es nicht. Sie haben 4 verschiedene Systeme, die verschiedene Dinge tun. Sie gehen mit DRY zu weit. Nach meiner Erfahrung ist die Art der Wiederverwendbarkeit, die Sie tun möchten, der Keim des Bösen, weil Sie eine enge Kopplung einführen. Das ist noch schlimmer als User
4 Mal in 4 verschiedenen Sprachen wiederholt zu haben. In verteilten Umgebungen ist die Kopplung ein Problem. DRY ist nicht.