2013-03-08 17 views
5

Chciałbym wiedzieć, jak wdrożyć fabryki w projektowanie oparte na domenie. (przykłady)DDD - Jak wdrożyć fabryki

Gdzie powinny znajdować się interfejsy i wdrożenia fabryk? Czy muszę tworzyć interfejsy dla obiektów domen, które tworzą fabryki? Czy muszę tworzyć fabryki dla repozytoriów, usług, ...

Używam Dependency Injection Containers, jak mogę je połączyć z fabrykami?

Dzięki.

+2

imho to pytanie jest niesłusznie zamknięte, ponieważ mówienie o fabrykach w DDD ogranicza to całkiem dobrze w porównaniu do mówienia o fabrykach w ogóle. jak je naśladować jest dobrym pytaniem, ponieważ zazwyczaj istnieją trzy podejścia: oddzielne fabryki, pozwalające repozytoriom działać jako fabryki lub po prostu "nowe" podmioty domeny. – jgauffin

+0

Nie należy jednak mieszać pytań dotyczących ogólnie podmiotów domen, ponieważ sprawia to, że pytanie jest niejednoznaczne. Zachowaj to konkretne lub stwórz wiele pytań. – jgauffin

Odpowiedz

10

Fabryki powinny być prostymi klasami, zazwyczaj statycznymi. Mogą być również implementowane jako statyczne metody na obiekcie lub obiekcie wartości, który tworzą. Fabryki powinny tworzyć obiekty domen bezpośrednio i tylko obiekty domeny. Co więcej, fabryki nie powinny być związane z zastrzykiem zależności, ponieważ obiekty domenowe nie powinny mieć w nie wstrzykniętych zależności.

Obiekty domenowe nie powinny implementować interfejsów - to niepotrzebna abstrakcja.

Z drugiej strony implementacje usług i repozytorium mają zależności i powinny być tworzone przez kontener DI.

+2

Interfejsy są w rzeczywistości zbędną abstrakcją, jeśli pracujesz samodzielnie nad opracowaniem jednorazowego prototypu (bez oczekiwanej ewolucji, a więc bez testów). W złożonych domenach z dużym zespołem ludzi pracujących na różnych warstwach, interfejsy umożliwiają efektywną równoległość refaktoryzacji po zmianach domeny. Co więcej, bez interfejsów właściwe testowanie jednostek staje się znacznie trudniejsze. –

+2

W szczególności dla obiektów domenowych interfejsy są nie tylko niepotrzebną abstrakcją, ale stanowią też szkodliwą abstrakcję. Interfejsy dla usług lub repozytoriów z drugiej strony są z pewnością cenne. Można jednak uniknąć deklarowania interfejsów tylko do testowania za pomocą ładnych szyderczych ram. Ogólnie rzecz biorąc, chcę tylko podkreślić koszty abstrakcji. Po pierwsze, poznajemy wartość abstrakcji, a następnie koszt. – eulerfx

+0

Zgadzam się, że w większości przypadków typowe obiekty domenowe nie będą wymagać interfejsów innych niż wspomniane. Ale jak zwykle zależy to od domeny :) Jeśli istnieją ogólne obiekty, które mogą być wymieniane (strategie) w twojej domenie, może to być przydatne, a nawet konieczne. Ale myślę, że byłby to wyjątek. –