2013-03-08 6 views
5

Ich würde gerne wissen, wie man Fabriken in domain-driven Design implementieren. (Beispiele)DDD - So implementieren Sie Fabriken

Wo sollten Schnittstellen und Implementierungen von Fabriken platziert werden? Muss ich Schnittstellen für Domänenobjekte erstellen, die von Fabriken erstellt werden? Muss ich Fabriken für Repositories, Dienste, ... erstellen

Ich verwende Dependency Injection Containers Wie kann ich sie mit Fabriken zusammenstellen?

Danke.

+2

imho diese Frage ist zu Unrecht geschlossen, da über Fabriken in DDD sprechen, im Vergleich zu Fabriken im Allgemeinen ziemlich gut begrenzt. wie man sie einfügt, ist eine gute Frage, da es typischerweise drei Ansätze gibt: getrennte Fabriken, die die Repositorien als Fabriken oder einfach als "neue" Domänen-Einheiten fungieren lassen. – jgauffin

+0

Allerdings nicht in Fragen über Domain-Einheiten im Allgemeinen mischen, da es Ihre Frage mehrdeutig macht. Behalte es für spezifisch oder erstelle mehrere Fragen. – jgauffin

Antwort

10

Fabriken sollten einfache Klassen sein, normalerweise statisch. Sie können auch als statische Methoden für das Entitäts- oder Wertobjekt implementiert werden, das sie erstellen. Fabriken sollten Domänenobjekte direkt und nur Domänenobjekte erstellen. Darüber hinaus sollten Fabriken nicht mit der Abhängigkeitsinjektion verknüpft sein, da Domänenobjekte keine Abhängigkeiten enthalten sollten.

Domain-Objekte sollten keine Schnittstellen implementieren - das ist eine unnötige Abstraktion.

Dienste und Repository-Implementierungen haben dagegen Abhängigkeiten und sollten vom DI-Container erstellt werden.

+2

Schnittstellen sind eigentlich eine unnötige Abstraktion, wenn Sie alleine arbeiten, um einen Einweg-Prototyp zu entwickeln (keine Evolution erwartet und somit keine Tests). In komplexen Domänen mit einem großen Team von Mitarbeitern, die auf verschiedenen Ebenen arbeiten, ermöglichen Schnittstellen eine effektive Parallelisierung von Refactorings nach Domänenänderungen. Darüber hinaus wird eine ordnungsgemäße Komponententestung ohne Schnittstellen viel schwieriger. –

+2

Insbesondere bei Domänenobjekten sind Interfaces nicht nur eine unnötige Abstraktion, sondern auch eine schädliche Abstraktion. Schnittstellen für Dienste oder Repositories sind dagegen sicherlich wertvoll. Das Deklarieren von Schnittstellen für das Testen allein kann jedoch mit einem netten Spott-Framework vermieden werden. Generell möchte ich nur Abstraktionskosten hervorheben. Zuerst lernt man den Wert der Abstraktion, dann die Kosten. – eulerfx

+0

Ich würde zustimmen, dass typische Domänenobjekte in den meisten Fällen keine anderen als die von Ihnen genannten Schnittstellen benötigen. Aber wie immer hängt es von der Domäne ab :) Wenn es generische Objekte gibt, die in Ihrer Domäne ausgetauscht werden können (Strategien), dann kann es nützlich oder sogar notwendig sein. Aber ich denke, es wäre eine Ausnahme. –