Como ejemplo, supongamos que está escribiendo una aplicación en Java .
Su aplicación se comunica con un servidor API escrito en Python .
El servidor Python se comunica con una base de datos SQL .
También tiene un sitio web para su aplicación escrito en JavaScript .
Con 4 idiomas diferentes, es fácil terminar repitiendo esencialmente las mismas estructuras de datos 4 veces diferentes.
Por ejemplo, un User
tipo podría verse así (pseudocódigo):
type User {
integer id;
string name;
timestamp birthday;
}
Cada parte del proyecto necesitaría algún tipo de representación para User
. Las partes de Java y Python necesitarían dos class
declaraciones diferentes . La base de datos necesitaría una User
declaración de tabla. Y el sitio de front end también necesitaría representar un User
.
La repetición de este tipo 4 veces diferentes realmente rompe el principio de no repetirse . También existe el problema de que si User
se altera el tipo, estos cambios deben repetirse en cada parte diferente del proyecto.
Sé que la biblioteca protobuf de Google ofrece un tipo de solución a este problema en el que escribes una estructura de datos utilizando una sintaxis especial, y luego la biblioteca genera una declaración de estructura para ti en múltiples lenguajes de programación diferentes. Pero esto todavía no se ocupa del problema de tener que repetir la lógica de validación para sus tipos.
¿Alguien tiene alguna sugerencia o enlaces a libros / publicaciones de blog sobre esto?
Repeating this type 4 different times really breaks the Don't-Repeat-Yourself principle
. No, no lo hace. Tienes 4 sistemas diferentes que hacen cosas diferentes. Estás llevando DRY demasiado lejos. Según mi experiencia, el tipo de reutilización que quieres hacer es la semilla del mal, porque introduce un acoplamiento estrecho. Eso es aún peor que haberlo repetido User
4 veces en 4 idiomas diferentes. En entornos distribuidos, el acoplamiento es un problema. SECO no lo es.