TL; DR - Ist es in Ordnung, eine POJO-Bibliothek zwischen Diensten zu teilen?
Im Allgemeinen möchten wir die gemeinsame Nutzung zwischen Diensten nach Möglichkeit strikt auf keine beschränken. Es gab einige Debatten darüber, ob der Dienst, der Daten gemeinsam nutzt, eine Client-Bibliothek für Clients bereitstellen sollte. Die client-lib ist im Allgemeinen für einen Client des Dienstes optional und kann die API nach Belieben verwenden, unabhängig davon, ob die client-lib verwendet werden soll oder eine alternative Sprache und die allgemeinen Aspekte der Bibliothek und dergleichen.
In meinem Fall - Ich betrachte einen Dienst, der ein Objekt von Daten erstellt. Nehmen wir an, dieses Objekt ist ein PET. Es ist NICHT die Datenbankentität, sondern ausschließlich ein POJO, das implizit die zugrunde liegenden Daten darstellt. Dieses POJO ist das, was die API definiert hat. Angenommen: Haustier - Alter, Gewicht, Name, Besitzer, Adresse, Art usw.
Service 1 - PetKeeper: Es wird aus irgendeinem Grund ein Haustier generiert und alle Daten gespeichert. Es muss auf diesen Service verweisen, um das Haustier zu erhalten, oder Änderungen am Haustier vornehmen, z API-Aufruf an diesen Service.
Service 2 - PetAccessor: Dieser Service sammelt die Haustiere und führt Validierungsprüfungen durch
Service 3,4 - Weitere Zwischenrufe
Service 5 - Benutzeroberfläche
Diese sind sehr willkürlich, aber der Punkt ist einfach. Die Benutzeroberfläche oder ein benutzerbezogener Dienst möchte dieses "PET" -Objekt auf irgendeine Weise präsentieren. Sie muss über eine API einen Dienst aufrufen, der einen Dienst aufruft, der einen Dienst aufruft usw., bis sie den Dienst erreicht, der die erforderlichen Informationen sammelt, und die Weiterleitung beginnt. Schließlich muss der UI-Service das PET-Objekt anzeigen.
Dies ist ziemlich verbreitet - aber mit unserer absoluten Mentalität haben wir das PET-Objekt in jedem Service dupliziert. Das DRY-Prinzip (wiederholen Sie sich nicht) gilt nur für Code INSIDE eines Dienstes und gilt nicht für alle Dienste, aber der Punkt ist immer noch da. Was ist, wenn wir ein Feld hinzufügen ... müssen wir jeweils 5 Dienste des POJO ändern.
- ODER - Wir können eine Pet-Objects-Bibliothek bereitstellen, die einige der Pojos aus der API enthält, und jeder Dienst kann importieren / von der Bibliothek abhängig sein. Es besteht keine Abhängigkeit von den Diensten selbst, sondern nur von der allgemeinen Bibliothek. Ich mag diese Idee, damit jeder Dienst den gleichen Objekttyp hat und Updates einfacher sind. Aber ich mache mir Sorgen um Gott-Objekte.
Was sind die Vor- / Nachteile - was ist das beste Design? Was haben Sie getan, um Daten zwischen Diensten zu übertragen, um die Wiederholung der gleichen POJO-Klassen zu minimieren und gleichzeitig die Kopplung zu vermeiden?