BranchId ist überall enthalten, weil alles der BranchId zugeordnet werden muss. Das mit CustomerID vom Typ Customer habe ich nicht gefunden.
Nein, so funktioniert das nicht. Wenn ich ein Lager habe, dann muss ich wissen zu welcher Filiale (branchID) das gehört. Alle Artikel, die in diesem Lager sind, haben die gleiche branchID wie das Lager. Also ist die Angabe mind. Redundant und das ist schlecht.
Das fiktive Beispiel ist:
Hier muss man nun genau lesen. Hier ist von Customer (Kunde) gar keine Rede. Warum wird das dann modelliert? Es ist ein Warenwirtschaftssystem innerhalb einer Organisation. Der Kunde ist ja der Besteller. Also entweder die zielfiliale oder der Angestellte.
Jede Filiale hat ein eigenes
lokales Lager, welches ein lokales Sortiment verwaltet.
Das sehe ich falsch modelliert. Üblicherweise will ich doppeleingaben verhindern in einem Software System. Hier wäre also der Artikel vom Sortiment zu trennen.
Wenn zwei Filialen den gleichen Artikel haben, dann müssen beide diesen neu eingeben.
Und was passiert wenn der eine Artikel von Zentrallager an Filiale geliefert wird. Wie soll man das zusammenfügen?
Also das ist nicht sauber.
Das mit CustomerID vom Typ Customer habe ich nicht gefunden.
Du hast eine Entität Order.
Darin ist eine Customer ID vom Typ Long. Das ist falsch. Denn hier müsste sowas stehen wie Custimer vom Typ Customer. Analog wie du es bei delivery gemacht hast.
Gleichzeitig ist das eine redundante Angabe weil. Ich das anhand der Assoziation sehen kann.
Möglicherweise bisschen ungenau weil ich ich die Richtung der Assoziation nicht erkenne. Du möchtest bidirektional. Dann fehlen da noch Pfeile.
Die Bestellung wird entgegengenommen und anschließend werden die Artikeldaten sowie die Kundendaten asynchron von den zuständigen Microservices angefragt. Ist das schlecht?
Also hier müssen wir unterscheiden zwischen den Prozessen innerhalb eines Microservices und zwischen den microservices.
Ich als Benutzer möchte ja ein Feedback haben: deine Bestellung ist durch. Klar in meinem Browser oder App dreht sich eine Eieruhr und ich warte. Und das kann asynchrone sein.
Aber die Aufgabe einer Bestellung kann das nicht. Denn ich will ja nicht 10 Minuten auf die Antwort warten. Bis der microservices soweit ist meine Anfrage zu beantworten. Sondern sofort.
Beim log ist das richtig. Da schicke ich. Eine Nachricht und dann egal. Aber das einholen von Kunden Informationen. Und Artikel muss synchrone passieren. Weil ich im Zweifel eine Reihenfolge habe. Wenn der Kunde nicht da ist, dann bringen mir die Artikel Nix.