Per quanto riguarda i microservizi, anche i cicli di vita dei servizi dovrebbero essere indipendenti. *
Diversi SLDC e diversi team di sviluppo
in un vero sistema MS, potrebbero esserci diversi team coinvolti nello sviluppo dell'ecosistema, ciascuno dei quali responsabile di uno o più servizi. A loro volta, questi team potrebbero trovarsi in diversi uffici, città, paesi, piani ... Forse non si conoscono nemmeno, ciò che rende molto difficile la condivisione di conoscenza o codice (se possibile). Ma questo potrebbe essere molto conveniente perché il codice condiviso implica anche una sorta di ragionamento condiviso e qualcosa di importante da ricordare è che, qualunque cosa abbia senso per un team specifico, non deve farlo per un altro team. Ad esempio, dato il cliente DTO , potrebbe essere diverso a seconda del servizio in gioco, poiché i clienti vengono interpretati (o visti) in modo diverso da ciascun servizio.
Esigenze diverse, tecnologie diverse
Gli SLDC isolati consentono inoltre ai team di scegliere lo stack più adatto alle proprie esigenze. L'imposizione di DTO implementati in una tecnologia specifica limita la capacità dei team di scegliere.
I DTO non sono né regole commerciali né contratti di servizi
Quali DTO sono veramente? Oggetti semplici senza altro obiettivo se non quello di spostare i dati da un lato all'altro. Sacchi di getter e setter. Non è il tipo di "conoscenza" che vale la pena riutilizzare, in generale perché non c'è alcuna conoscenza. La loro volatilità li rende anche cattivi candidati per l'accoppiamento.
Contrariamente a quanto affermato da Dherik, deve essere possibile che un servizio modifichi i propri DTO senza dover fare contemporaneamente cambiare altri servizi. I servizi dovrebbero essere lettori tolleranti, scrittori tolleranti e non tolleranti . Altrimenti, causano l'accoppiamento in modo tale da rendere insensata l'architettura del servizio. Ancora una volta, e contrariamente alla risposta di Dherik, se tre servizi necessitano esattamente degli stessi DTO, è probabile che qualcosa sia andato storto durante la decomposizione dei servizi.
Affari diversi, interpretazioni diverse
Mentre potrebbero esserci (e ci saranno) concetti trasversali tra i servizi, ciò non significa che dobbiamo imporre un modello canonico per costringere tutti i servizi a interpretarli allo stesso modo.
Argomento di studio
Supponiamo che la nostra azienda abbia tre dipartimenti, servizio clienti , vendite e spedizioni . Di 'a ciascuna di queste versioni uno o più servizi.
Il servizio clienti, grazie al suo linguaggio di dominio , implementa servizi intorno al concetto di clienti, in cui i clienti sono persone . Ad esempio, i clienti sono modellati come nome , cognome , età , sesso , e-mail , telefono , ecc.
Ora diciamo che le vendite e le spedizioni modellano i loro servizi anche in base alle rispettive lingue di dominio. In queste lingue, appare anche il concetto di cliente, ma con una sottile differenza. Per loro, i clienti non sono (necessariamente) persone . Per le vendite , i clienti sono un numero di documento una carta di credito e un indirizzo di fatturazione , per la spedizione anche un nome completo e un indirizzo di spedizione .
Se forziamo le vendite e le spedizioni ad adottare il modello di dati canonico del servizio clienti , li stiamo costringendo a gestire i dati non necessari che potrebbero finire per introdurre complessità inutili se devono mantenere l'intera rappresentazione e mantenere i dati dei clienti in sintonia con il servizio clienti .
Link correlati
* Qui è dove pongono i punti di forza di questa architettura
proto
file per gRPC o loavro
schema per Kafka e generare i DTO in entrambi i servizi, ma non condividerei una libreria condivisa tra due progetti.