Como exemplo, digamos que você esteja escrevendo um aplicativo em Java .
Seu aplicativo se comunica com um servidor de API escrito em Python .
O servidor Python se comunica com um banco de dados SQL .
Você também tem um site para seu aplicativo escrito em JavaScript .
Com 4 idiomas diferentes, é fácil acabar repetindo essencialmente as mesmas estruturas de dados 4 vezes diferentes.
Por exemplo, um User
tipo pode ficar assim (pseudocódigo):
type User {
integer id;
string name;
timestamp birthday;
}
Cada parte do projeto precisaria de algum tipo de representação User
. As partes Java e Python precisariam de duas class
declarações diferentes . O banco de dados precisaria de uma User
declaração de tabela. E o site de front-end também precisaria representar um User
.
Repetir esse tipo 4 vezes diferentes realmente quebra o princípio de não se repetir . Também existe o problema de que, se o User
tipo for alterado, essas alterações precisarão ser repetidas em todas as partes diferentes do projeto.
Eu sei que a biblioteca protobuf do Google oferece um tipo de solução para esse problema, em que você escreve uma estrutura de dados usando uma sintaxe especial e, em seguida, a biblioteca gera uma declaração de estrutura para você em várias linguagens de programação diferentes. Mas isso ainda não lida com a questão de ter que repetir a lógica de validação para seus tipos.
Alguém tem alguma sugestão ou link para livros / posts sobre isso?
Repeating this type 4 different times really breaks the Don't-Repeat-Yourself principle
. Não, não. Você tem 4 sistemas diferentes que fazem coisas diferentes. Você está levando o DRY longe demais. De acordo com minha experiência, o tipo de reutilização que você deseja fazer é a semente do mal, porque introduz um acoplamento rígido. Pior ainda do que repetir User
4 vezes em 4 idiomas diferentes. Em ambientes distribuídos, o acoplamento é um problema. SECO não é.