Cuando se trata de microservicios, los ciclos de vida de desarrollo de los servicios también deberían ser independientes. * *
Diferentes SLDC y diferentes equipos de desarrollo
En un sistema de EM real, podría haber varios equipos involucrados en el desarrollo del ecosistema, cada uno de los cuales está a cargo de uno o más servicios. A su vez, estos equipos pueden estar ubicados en diferentes oficinas, ciudades, países, planes ... Quizás, ni siquiera se conocen entre sí, lo que hace que compartir conocimiento o código sea muy difícil (si es posible). Pero esto podría ser muy conveniente porque el código compartido también implica una especie de razonamiento compartido y algo importante para recordar es que, lo que tenga sentido para un equipo específico, no tiene que hacerlo para otro equipo. Por ejemplo, dado el Cliente DTO , podría ser diferente dependiendo del servicio en juego, porque los clientes son interpretados (o vistos) de manera diferente a cada servicio.
Diferentes necesidades, diferentes tecnologías.
Los SLDC aislados también permiten a los equipos elegir la pila que mejor se adapte a sus necesidades. La imposición de DTO implementados en una tecnología específica limita la capacidad de los equipos para elegir.
Los DTO no son reglas comerciales ni contratos de servicios.
¿Qué son realmente los DTO? Objetos simples sin otro objetivo que mover datos de un lado a otro. Bolsas de captadores y colocadores. No es el tipo de "conocimiento" que vale la pena reutilizar, en general porque no hay ningún conocimiento en absoluto. Su volatilidad también los convierte en malos candidatos para el acoplamiento.
Contrariamente a lo que Dherik ha declarado, debe ser posible que un servicio cambie sus DTO sin tener que hacer que otros servicios cambien al mismo tiempo. Los servicios deben ser lectores tolerantes, escritores tolerantes y tolerantes a fallas . De lo contrario, provocan el acoplamiento de tal manera que la arquitectura del servicio no tiene sentido. Una vez más, y contrario a la respuesta de Dherik, si tres servicios necesitan exactamente los mismos DTO, es probable que algo haya salido mal durante la descomposición de los servicios.
Diferentes negocios, diferentes interpretaciones
Si bien podría haber (y habrá) conceptos transversales entre los servicios, no significa que tengamos que imponer un modelo canónico para obligar a todos los servicios a interpretarlos de la misma manera.
Caso de estudio
Digamos que nuestra empresa tiene tres departamentos, Servicio al Cliente , Ventas y Envíos . Digamos que cada uno de estos lanzamientos de uno o más servicios.
Servicio al cliente, debido a su lenguaje de dominio , implementa servicios en torno al concepto de clientes, donde los clientes son personas . Por ejemplo, los clientes se modelan como nombre , apellido , edad , sexo , correo electrónico , teléfono , etc.
Ahora, digamos, Ventas y Envíos modelan sus servicios de acuerdo con sus respectivos idiomas de dominio también. En estos idiomas, el concepto de cliente también aparece pero con una sutil diferencia. Para ellos, los clientes no son (necesariamente) personas . Para ventas , los clientes son una serie de documentos de una tarjeta de crédito y una dirección de facturación , para el envío de un nombre completo y una dirección de envío también.
Si obligamos a Ventas y envíos a adoptar el modelo de datos canónicos del Servicio al cliente , los estamos obligando a tratar con datos innecesarios que podrían terminar introduciendo una complejidad innecesaria si tienen que mantener toda la representación y mantener los datos del cliente sincronizados con el servicio al cliente. .
Enlaces relacionados
* Aquí es donde se encuentran los puntos fuertes de esta arquitectura
proto
archivo para gRPC o elavro
esquema para Kafka y generar los DTO en ambos servicios, pero no compartiría una biblioteca compartida entre dos proyectos.