2016-07-27 33 views
2

In meinem Projekt zu Hause sah ich ein Problem bei der Bestimmung eines Typs meines Domain-Objekts.Ist eine DDD-Entität in meinem DDD-Value-Objekt verborgen?

Domain: Busfahrplan

Bounded Kontexte: Routing (öffentliche Verkehrsinfrastruktur, CTX1), Zeitplan (Scheduling, ctx2)

Objekte:

  • Station - beschreibt eine Bushaltestelle

  • Route (ctx1) - eine Reihe von Stationen (Route Wegpunkte)

  • Linie (ctx1) - beschreibt eine Buslinie. Enthält Liste.

  • Zeitplan (ctx2) - ein benannter Satz von Abweichungen von den Wegpunkten der Route.

Zum Beispiel: eine Bus-Leitung 25A hat zwei Routen [{ST1, ST3, ST20}, {ST20, ST15, ST3, st1}] und 2 Termine (Liste 1 - Route 1, sch2- r2) an diese 2 Routen angeschlossen.

Ohne Zweifel identifiziert ich Linie und Stadt als DDD Einheiten, aggregieren Wurzeln. Außerdem habe ich beschlossen, Routen in Linien zu legen, weil sie außerhalb der Linie und ihres Lebenszyklus keinen Sinn ergeben. Sieht immer noch gut aus.

Der nächste Schritt ist das Definieren des Schedule-Domänenobjekts. Ich wollte es von der Infrastruktur des öffentlichen Verkehrs trennen, also stelle ich es als Einheit in einen anderen Kontext. Das Problem ist, dass ich es jetzt an die Route anhängen muss, die keine Kennung hat.

Meine Ideen:

  • Put Zeitplan in die Route. Warum es keine Option ist: Die Linie wird fett; erstellt einen Überkontext von ctx1 und ctx2

  • Machen Route eine Entität. Warum ist es keine Option (ich denke ...): Während es nicht schwer ist, sich eine Route mit einem Identifikator vorzustellen (z.B. Name), ist es kaum genug, sich eine Busroute außerhalb einer Buslinie vorzustellen.

Vielleicht habe ich etwas völlig falsch gemacht?

Antwort

3

Ich denke, Sie müssen mehr darüber nachdenken, wie Sie Ihre Domain verwenden möchten. In Ihrem Beispiel sagen Sie bereits, dass Sie eine Linie haben, eine Linie hat eine Route und eine Linie hat Zeitpläne.

Ich würde auch erwarten, dass Sie Route Fragen fragen (wie ist St77 auf dieser Route) Oder Operationen (Stop S99 ist für 2 Wochen geschlossen). Das bedeutet, dass Route eine Entität ist. möglicherweise sind Ihre Stops Wertobjekte.

Die Gesamtwurzel der Route wäre eine Buslinie, wie Sie sagten, Sie können keine Route außerhalb einer Linie abbilden. Welches ist genau das, was eine aggregierte Wurzel bedeutet.

Außerdem muss die Kennung einer Route kein aussagekräftiger Name sein, sie könnte eine zufällige Guid als Kennung haben. Mein Computer als Seriennummer. Niemand redet jemals wirklich über diese Seriennummer (ich spreche von einem Dell Typ x), aber als ich es bestellt habe, ist das eine sehr gute Nummer, um diesen spezifischen Computer zu identifizieren und zu verfolgen.

update auch DDD ist über die Beschreibung/Modellierung Ihres Problems. Es geht um die Reise, die Ihre Problemdomäne enthüllt. Seien Sie nicht zu sehr darauf fixiert, wie es aussieht, sondern entdecken Sie, wie es aussieht, wenn Sie mit dem Problem, das Sie lösen möchten, sprechen (mit Ihrem Domänenexperten). Vielleicht entdecken Sie, dass Routen und Linien nicht einmal wichtig sind nur Termine & stoppt. (Wenn das Problem, das Sie versuchten, zu lösen, wenn Sie herausfinden, wenn der nächste Bus kommt, scheinen Linien mehr zu bedeuten, wenn Sie die Busgesellschaft sind und den Bus tatsächlich fahren müssen)

+0

Sie sagten: '' 'und eine Linie hat Zeitpläne '' '- das ist eine Sache, die ich vermeiden möchte. Ich möchte, dass meine Routingdomäne nichts über die Zeitplandomäne weiß. Das heißt, die "Schedule" -Entität muss den Identifikator einer Route haben. Aber wenn "Route" eine Entität in "Line Aggreate Root" ist, kann ich sie nicht referenzieren, solange sie Teil von Aggreate Root ist und die einzige mögliche Referenz ist hier eine Verbindung zwischen 'Schedule' und' Line'. Habe ich recht? – ovnia

+0

ist alles 1 große Domäne (mit möglicherweise mehreren Aggregatwurzeln). Aber eine Linie, eine Route und ein Zeitplan scheinen sehr miteinander verbunden zu sein. Ihr Fahrplan ist abhängig von der Route. So sehe ich nicht 2 begrenzten Kontext passiert hier – Batavia

+2

+1 Excellent bearbeiten, Batavia. Es ist so leicht, sich daran zu verfangen, wie "wir" es modelliert sehen wollen, aber die Antwort ist wahrscheinlich bereits vorhanden, wenn der Interessenvertreter gefragt wird. Die Elemente der Ubiquitous Language existieren sehr wahrscheinlich bereits vor der Implementierung. Unabhängig davon, was aus Entwicklungsperspektive am sinnvollsten ist, sollte es von der Art und Weise bestimmt werden, wie die Interessengruppen es sehen. Ist dies nicht der Fall, erschwert dies die Kommunikation zwischen dem Entwicklungsteam (das die Domänenexperten/Stakeholder einschließt). –