Par exemple, supposons que vous écrivez une application en Java .
Votre application communique avec un serveur API écrit en Python .
Le serveur Python communique avec une base de données SQL .
Vous avez également un site Web pour votre application écrit en JavaScript .
Avec 4 langues différentes, il est facile de finir par répéter essentiellement les mêmes structures de données 4 fois différentes.
Par exemple, un User
type pourrait ressembler à ceci (pseudocode):
type User {
integer id;
string name;
timestamp birthday;
}
Chaque partie du projet aurait besoin d'une sorte de représentation User
. Les parties Java et Python auraient besoin de deux class
déclarations différentes . La base de données aurait besoin d'une User
déclaration de table. Et le site frontal devrait également représenter un User
.
La répétition de ce type 4 fois différentes rompt vraiment le principe Don't-Repeat-Yourself . De plus, si le User
type est modifié, ces modifications doivent être répétées dans chaque partie du projet.
Je sais que la bibliothèque protobuf de Google offre une sorte de solution à ce problème dans laquelle vous écrivez une structure de données en utilisant une syntaxe spéciale, puis la bibliothèque génère une déclaration de structure pour vous dans plusieurs langages de programmation différents. Mais cela ne résout toujours pas le problème de devoir répéter la logique de validation pour vos types.
Quelqu'un a-t-il des suggestions ou des liens vers des livres / articles de blog à ce sujet?
Repeating this type 4 different times really breaks the Don't-Repeat-Yourself principle
. Non, ce n'est pas le cas. Vous avez 4 systèmes différents qui font des choses différentes. Vous prenez SEC trop loin. D'après mon expérience, la sorte de réutilisabilité que vous voulez faire est la graine du mal, car introduisez un couplage étroit. C'est encore pire que d'avoir répété User
4 fois dans 4 langues différentes. Dans les environnements distribués, le couplage est un problème. DRY ne l'est pas.