Ad esempio, supponiamo di scrivere un'app in Java .
L'app comunica con un server API scritto in Python .
Il server Python comunica con un database SQL .
Hai anche un sito Web per la tua app scritto in JavaScript .
Con 4 lingue diverse, è facile finire per ripetere essenzialmente le stesse strutture dati 4 volte diverse.
Ad esempio, un User
tipo potrebbe assomigliare a questo (pseudocodice):
type User {
integer id;
string name;
timestamp birthday;
}
Ogni parte del progetto avrebbe bisogno di un qualche tipo di rappresentazione per User
. Le parti Java e Python avrebbero bisogno di due diverse class
dichiarazioni. Il database avrebbe bisogno di una User
dichiarazione di tabella. E anche il sito di front-end dovrebbe rappresentare un User
.
Ripetendo questo tipo 4 volte diverse si rompe davvero il principio Don't Repeat-Yourself . Inoltre c'è il problema che se il User
tipo viene modificato, questi cambiamenti devono essere ripetuti in ogni diversa parte del progetto.
So che la libreria di protobuf di Google offre una sorta di soluzione a questo problema in cui si scrive una struttura di dati utilizzando una sintassi speciale, e quindi la libreria genera una dichiarazione di struttura in più linguaggi di programmazione diversi. Ma questo non risolve ancora il problema di dover ripetere la logica di validazione per i tuoi tipi.
Qualcuno ha suggerimenti o collegamenti a libri / post di blog su questo?
Repeating this type 4 different times really breaks the Don't-Repeat-Yourself principle
. Non lo fa. Hai 4 sistemi diversi che fanno cose diverse. Stai portando DRY troppo lontano. Secondo la mia esperienza, il tipo di riusabilità che vuoi fare è il seme del male, perché introduce uno stretto accoppiamento. È ancora peggio che averlo ripetuto User
4 volte in 4 lingue diverse. In ambienti distribuiti, l'accoppiamento è un problema. DRY no.