Auch bei Microservices sollten die Entwicklungszyklen der Services unabhängig sein. *
Verschiedene SLDC und verschiedene Entwicklerteams
In einem echten MS-System könnten mehrere Teams an der Entwicklung des Ökosystems beteiligt sein, die jeweils für einen oder mehrere Dienste zuständig sind. Diese Teams wiederum befinden sich möglicherweise in verschiedenen Büros, Städten, Ländern, Plänen ... Vielleicht kennen sie sich nicht einmal, was den Austausch von Wissen oder Code (wenn möglich) sehr schwierig macht. Dies kann jedoch sehr praktisch sein, da gemeinsam genutzter Code auch eine Art Argumentation für die gemeinsame Nutzung impliziert. Was auch immer für ein bestimmtes Team sinnvoll ist, muss es nicht für ein anderes Team sein. Beispielsweise kann es für den DTO- Kunden in Abhängigkeit vom jeweiligen Dienst unterschiedlich sein , da Kunden von jedem Dienst unterschiedlich interpretiert (oder gesehen) werden.
Unterschiedliche Bedürfnisse, unterschiedliche Technologien
Mit isolierten SLDCs können Teams auch den Stapel auswählen, der ihren Anforderungen am besten entspricht. Das Auferlegen von DTOs, die in einer bestimmten Technologie implementiert sind, schränkt die Auswahlmöglichkeiten der Teams ein.
DTOs sind weder Geschäftsregeln noch Dienstleistungsverträge
Was sind eigentlich DTOs? Einfache Objekte mit keinem anderen Ziel als dem Verschieben von Daten von einer Seite zur anderen. Taschen von Gettern und Setzern. Es ist nicht die Art von "Wissen", das es wert ist, wiederverwendet zu werden, insgesamt, weil es überhaupt kein Wissen gibt. Ihre Volatilität macht sie auch zu schlechten Kandidaten für eine Kopplung.
Entgegen der Aussage von Dherik muss es einem Dienst möglich sein, seine DTOs zu ändern, ohne dass andere Dienste gleichzeitig geändert werden müssen. Dienstleistungen sollten seine tolerant Leser, tolerant Schriftsteller und tolerant scheitern . Andernfalls verursachen sie eine Kopplung auf eine Weise, die die Dienstarchitektur sinnlos macht. Noch einmal, und im Gegensatz zu Dheriks Antwort, ist es wahrscheinlich, dass während der Zerlegung der Dienste etwas schief gelaufen ist, wenn drei Dienste genau dieselben DTOs benötigen.
Unterschiedliches Geschäft, unterschiedliche Interpretationen
Es könnte (und wird) Querschnittskonzepte zwischen den Diensten geben, aber das bedeutet nicht, dass wir ein kanonisches Modell auferlegen müssen, um alle Dienste zu zwingen, diese auf die gleiche Weise zu interpretieren.
Fallstudie
Nehmen wir an, unser Unternehmen hat drei Abteilungen: Kundendienst , Verkauf und Versand . Angenommen, jede dieser Versionen gibt einen oder mehrere Dienste frei.
Kundendienst aufgrund seiner Domain Sprache , implementiert Dienstleistungen rund um das Konzept der Kunden, wo die Kunden sind Personen . Beispielsweise werden Kunden als Name , Nachname , Alter , Geschlecht , E-Mail , Telefon usw. modelliert .
Angenommen, Vertrieb und Versand modellieren ihre Dienste auch entsprechend ihrer jeweiligen Domänensprache. In dieser Sprache ist der Begriff Kunde erscheint auch , aber mit einem feinen Unterschied. Für sie Kunden sind nicht (unbedingt) Personen . Für den Verkauf sind Kunden eine Belegnummer, eine Kreditkarte und eine Rechnungsadresse , für den Versand auch ein vollständiger Name und eine Lieferadresse .
Wenn wir Vertrieb und Versand dazu zwingen, das kanonische Datenmodell des Kundenservice zu übernehmen , zwingen wir sie dazu, mit unnötigen Daten umzugehen, was zu unnötiger Komplexität führen kann, wenn sie die gesamte Darstellung beibehalten und die Kundendaten mit dem Kundenservice synchron halten müssen .
Ähnliche Links
* Hier liegen die Stärken dieser Architektur
proto
Datei für gRPC oder dasavro
Schema für Kafka freizugeben und die DTOs in beiden Diensten zu generieren, aber ich würde keine gemeinsam genutzte Bibliothek zwischen zwei Projekten freigeben.