2016-11-29 16 views
6

Jestem początkującym programistą DDD, pracuję nad małymi, prostymi domenami, aby mieć głowę na temat wszystkich zasad projektowania.Relacje między podmiotami w DDD

Mam tę prostą domenę: instytucje (Institution) i ich dostępne spoty WiFi (Place) są przechowywane w bazie danych. Żadne miejsce nie może istnieć bez instytucji. Instytucja ma użytkownika menedżera - cesjonariusza (User), który ma prawo do dodawania nowych miejsc, ponownego przydzielania lub usuwania istniejących.

Code can be found here. Walidacja na obiektach wartości pozostaje na razie. To jest pod wpływem Mathias Verraes on child entities.

Czy to prawidłowy projekt DDD? lub przynajmniej blisko?

Będąc programistą opartym na danych, wciąż zastanawiam się, jak wyliczyć wszystkie miejsca dla wszystkich instytucji, jeśli reguła uzyskuje dostęp do agregatów za pośrednictwem zagregowanego katalogu głównego?

Czy pomysł wygenerowania Uuid wewnątrz samej jednostki (Place::create) jest dobry?

Czy pomysł, że tylko cesjonariusz (User) może dodawać/usuwać miejsca, jest wyrażany w samej domenie lub powinien być odpowiedzialny za klienta? W takim przypadku byłoby rozsądnie, gdyby cesjonariusz wiedział o swojej zarządzanej instytucji (institutionId w User?).

Czy Institution::placeById nie łamie żadnych zasad DDD? Może to odpowiedzialność repozytorium?

Odpowiedz

2

Zagregowana zasada główna obowiązuje tylko po stronie zapisu. Ten problem zniknie, jeśli ma dedykowany model odczytu. Można projektować czytać modele dostosowane do scenariusza użytkownika.

W przeciwnym razie można dodać wszystkie miejsca z instytucji do skrótu, aby przywrócić tę spłaszczoną listę.

Po zsumowaniu zagregowanych korzeni należy pomyśleć o scenariuszu aktualizacji. Czy można aktualizować niezależnie od instytucji? Jeśli tak. Wtedy może to być własny główny agregat.

Zwykle repozytorium powinno określać następny identyfikator.

Wyraźne prawa użytkownika za pośrednictwem ról zawierających listę uprawnień. W każdej metodzie należy przekazać nadawcę i sprawdzić dostęp w ramach metod. Umożliwia to również łatwe testowanie praw dostępu.