2016-04-15 9 views
0

ich ein Problem haben Anwendung DDD die meisten der entweder zu komplex oder zu einfach (Item/ItemOrder Typ)Anwenden von DDD auf folgende Rekrutierungssystem

Ich habe ein Recruitment-System gefunden Beispiele sind online A Abteilung haben eine Reihe von Berufen (Ein Beruf kann nicht ohne eine Abteilung existieren) Ein Recruitment-Channel kann eine Reihe von Recruitment-Quellen haben (Eine Recruitment-Quelle kann nicht ohne einen Recruitment-Channel existieren) Jetzt habe ich einen Bewerber, der nicht ohne einen Beruf existieren kann und nicht existieren kann ohne eine Rekrutierungsquelle. Auch ein Interview kann nicht existieren, wenn es keinen Kandidaten gibt (aber ich sehe den Interviewteil innerhalb eines anderen beschränkten Kontexts wie Interviewkalender, der durch Domänenevents gesendet wird)

Ich versuche zu verstehen, wie man was in Bezug auf DDD AggregateRoot usw extrahiert (Ich glaube, ich habe zwei konkurrierende Parteien Abteilung und Recruitment Channel) Gegeben, ich wähle eins über das andere, wie würde ich mit dem anderen umgehen?

Vielleicht mache ich es falsch. Wenn mich jemand beleuchten kann, wäre das sehr hilfreich.

+1

Sie versuchen, DDD-Konzepte auf eine Reihe von Objekten anzuwenden, die einfach durch einige Einschränkungen verbunden sind. Das ist kein nützliches Domänenmodell. – Aryeh

+0

Ich tat das, weil es wie in domain-driven-design-fundamentals erklärt wurde. Sie sagt, dass man so weiß, dass eine Entität Teil eines Aggregats sein muss, "es kann nicht ohne existieren". – user3308583

Antwort

1

Scheint, dass Sie nicht zu Ihren Domain-Experten ask right questions. Alle Informationen, die Sie hier bekommen haben, können und können nicht mit etwas anderem existieren. Kennen Sie what does Beruf, Abteilung, Interview im Kontext des Systems?
Ihre Anforderungen sind alles über Daten (Tabellenrelationen), nicht die behaviour selbst.

In DDD setzen Sie über Substantive. Und Sie fangen sie als Ihre aggregierten Methoden. Dann wählen Sie die Aggregatgrenzen abhängig von den Transaktionsgrenzen (Muss es damit passieren, oder kann es warten?).

  • Fragen Sie zuerst Ihre Domain-Experten über requirements des Systems. Welche Funktionen sollte es bieten?
  • Dann fragen Sie nach user stories, die nur einfache Verwendungen des Systems sind. Aber don't talk about the front! Diese ist not user story-Wenn Kaufen-Button Benutzer klicken und senden Sie das Formular, dann kauft er ein Produkt dies Ihre user story sein kann - Als Benutzer, wenn ich Auto kaufen und ich bin ein VIP I 20% Rabatt erhalten sollte, damit ich wird eine andere bald kaufen machen

Von User Stories können Sie einige nützliche Informationen extrahieren, die mehr als zum Beispiel sind: „Laden mehrere Produkte haben, kann aber Produkt einen Titel haben“ Ich hoffe, Sie bekommen einen Punkt.

Über wie Aggregate modellieren, werfen Sie einen Blick hier Vaughn Vernon

3

Vielleicht darüber in die falsche Richtung ich gehe. Wenn mich jemand beleuchten kann, wäre das sehr hilfreich.

Schritt # 1: Blick auf die allgegenwärtige Sprache. Setzen Sie sich mit Ihren Domain-Experten zusammen und achten Sie sehr genau auf die Entitäten, über die sie sprechen.

Zum Beispiel:

Antragsteller, die nicht ohne Beruf existieren kann und kann nicht ohne eine Recruitment Quelle existieren.

Das scheint ein bisschen komisch. Ich würde erwarten, dass ein Bewerber eine Person ist, und Menschen existieren ohne eine "Rekrutierungsquelle" (was auch immer das ist). Wenn Sie sagen würden, dass eine Bewerbung ohne eine Einstellungsquelle nicht existieren kann, oder noch besser, dass Bewerbungen immer von Einstellungsquellen bezogen werden, bin ich eher der Meinung, dass Sie tatsächlich mit Experten in der Domain sprechen.

Domänenmodelle beschreiben keine Struktur; Domänenmodelle Kontrollwechsel.

Sie können keine intelligenten Entwurfsentscheidungen zu Aggregaten treffen, bis Sie die Änderungen verstanden haben, die vom Modell zugelassen werden. Oder besser gesagt, welche Änderungen sind nicht zulässig.

Das Identifizieren von Entitäten ist ein Teil des Modellierungsaufwands, aber Sie müssen sehr genau darauf achten, welche Entitäten dem Modell untergeordnet sind. Betrachten Sie zum Beispiel Kunde vs Konto; Das Modell kontrolliert wahrscheinlich nicht den Kunden (kann Ihr Modell verhindern, dass der Mensch seinen Namen ändert oder umzieht?), aber es kann das Konto kontrollieren (aussetzen, Werbeangebote verfolgen, VIP-Status bewerben).

Heuristik: Wenn Ihr Unternehmen es nicht kontrolliert, wird es auch nicht vom Modell gesteuert.