Co to jest Domain Driven Design (DDD)? [Zamknięte]

276

Wciąż widzę, że DDD (Domain Driven Design) jest często używany w artykułach - przeczytałem wpis w Wikipedii na temat DDD, ale nadal nie mogę zrozumieć, co to właściwie jest i jak bym wdrożył go w tworzeniu moich witryn?

leen3o
źródło

Odpowiedzi:

595

Po pierwsze, jeśli nie wiesz, że go potrzebujesz, to możliwe, że go nie potrzebujesz. Jeśli nie rozpoznajesz problemów, które rozwiązuje DDD, być może nie masz tych problemów. Nawet zwolennicy DDD często podkreślają, że DDD jest przeznaczony tylko dla dużych (> 6-miesięcznych) projektów.

Zakładając, że nadal czytasz w tym momencie, moje podejście do DDD jest następujące:

DDD polega na próbie uczynienia z oprogramowania modelu rzeczywistego systemu lub procesu. Korzystając z DDD, masz ściśle współpracować z ekspertem w dziedzinie, który może wyjaśnić, jak działa system rzeczywisty. Na przykład, jeśli opracowujesz system, który obsługuje obstawianie zakładów na wyścigi konne, ekspert w dziedzinie może być doświadczonym bukmacherem.

Pomiędzy sobą a ekspertem od domeny budujesz wszechobecny język (UL), który jest w zasadzie koncepcyjnym opisem systemu. Chodzi o to, że powinieneś być w stanie zapisać to, co robi system, w taki sposób, aby ekspert domeny mógł go odczytać i sprawdzić, czy jest poprawny. W naszym przykładzie bukmacherskim wszechobecny język obejmowałby definicje słów takich jak „wyścig”, „zakład”, „kurs” i tak dalej.

Koncepcje opisane przez UL będą stanowić podstawę projektu obiektowego. DDD zapewnia pewne jasne wskazówki dotyczące interakcji między obiektami i pomaga podzielić obiekty na następujące kategorie:

  • Obiekty wartości, które reprezentują wartość, która może mieć podzespoły (na przykład data może mieć dzień, miesiąc i rok)
  • Podmioty, które są obiektami o tożsamości . Na przykład każdy obiekt klienta ma własną tożsamość, więc wiemy, że dwóch klientów o tej samej nazwie nie jest tym samym klientem
  • Zagregowane korzenie to obiekty posiadające inne obiekty. Jest to złożona koncepcja i działa w oparciu o to, że istnieją obiekty, które nie mają sensu, chyba że mają właściciela. Na przykład obiekt „Linia zamówienia” nie ma sensu bez przynależności do „Zamówienia”, więc mówimy, że Zamówienie jest zagregowanym pierwiastkiem, a obiektami Linia zamówienia można manipulować tylko metodami w obiekcie Order

DDD zaleca również kilka wzorów:

  • Repozytorium , wzorzec trwałości (zapisywanie i ładowanie danych, zazwyczaj do / z bazy danych)
  • Fabryka , wzór do tworzenia obiektów
  • Usługa, wzorzec tworzenia obiektów, które manipulują głównymi obiektami domeny, nie będąc częścią samej domeny

W tym momencie muszę powiedzieć, że jeśli wcześniej nie słyszałeś o żadnej z tych rzeczy, nie powinieneś próbować używać DDD w żadnym projekcie, na który masz termin. Przed przystąpieniem do DDD należy zapoznać się ze wzorami projektowymi i wzorcami projektowymi dla przedsiębiorstw . Znając je, DDD jest o wiele łatwiejszy do zrozumienia. I, jak wspomniano powyżej, istnieje bezpłatne wprowadzenie do DDD dostępne w InfoQ (gdzie można również znaleźć rozmowy na temat DDD).

Rob Knight
źródło
33
Wow ... Co za świetna odpowiedź! Bardzo mile widziane i najlepsze wytłumaczenie, jakie przeczytałem w dowolnym miejscu o milę. Dzięki .. Jutro pobiorę tę książkę.
leen3o,
3
„Zagregowane korzenie to obiekty, które są właścicielami innych obiektów. Jest to złożona koncepcja i działa w oparciu o to, że istnieją obiekty, które nie mają sensu, chyba że mają właściciela.” Myślę, że może to być nieporozumienie, o czym wspominacie to „Cała wartość”, podczas gdy agregacja jest bardziej zainteresowana granicami transakcji, w których należy egzekwować wszystkie reguły niezmienności biznesowej.
super1ha1
6
Szczerze mówiąc, brzmi to prawie jak każdy projekt, w którym programiści współpracują z architektami od ponad miesiąca. (Cóż, przynajmniej według mojego doświadczenia.) Która realizacja sprawia, że ​​doceniam twoją odpowiedź jeszcze bardziej. :)
Jaroslav Záruba
4
Nie zgadzam się ze stwierdzeniem, że DDD jest „przeznaczony tylko dla dużych projektów”. DDD to nic, co musisz zrobić całkowicie lub wcale. Możesz po prostu ćwiczyć z DDD. Na przykład możesz po prostu robić „Obiekty wartości” i „wszechobecny język” i nie robić agregacji korzeni w małym projekcie.
EasterBunnyBugSmasher
6
Nawiasem mówiąc, nie przeprowadzamy analizy domen dla każdego projektu lub modelu. Czy już nigdy nie kończymy rozmów jako licencjackich z klientami i MŚP, aby zrozumieć dziedzinę i zakres projektu? Nadal nie rozumiem, co jest wyjątkowego w DDD, niż w jakimkolwiek innym projekcie rozwoju oprogramowania?
supernowa
51

Weźmy StackOverflow jako przykład. Zamiast zacząć projektować niektóre formularze internetowe, najpierw koncentrujesz się na modelowaniu obiektowym podmiotów w domenie problemowej, na przykład użytkowników, pytań, odpowiedzi, głosów, komentarzy itp. Ponieważ projekt opiera się na szczegółach problemu domena nazywa się projektowaniem opartym na domenie .

Możesz przeczytać więcej w książce Erica Evansa .

Matt Howells
źródło
5
Jest to skrócona wersja książki Erica Evansa dostępne za darmo .
troelskn
Problem polega na tym, że potrzebujesz kogoś, kto rozumie domenę w sposób wystarczająco zawstydzający, aby mógł powiedzieć coś użytecznego, zanim zwiąże strony za pomocą stron internetowych! Kiedy tak jest, proszę!
Ian Ringrose
3
Ale kto zacznie od zaprojektowania formy, szczerze? Każdy poważny kurs akademicki przechodziłby analizy, projektowanie i modelowanie aplikacji zgodnie z wymaganiami biznesowymi. Po prostu nie rozumiem, co nowego w tej technice.
Sebas
6
Ja też, to po prostu projekt obiektowy, z którego wszyscy korzystają, jeszcze zanim ta koncepcja się pojawiła. Nie widzę tu żadnego nowego wynalazku.
Ronen Festinger
2
@ RonenFestinger proszę nie oceniaj DDD tylko na podstawie tej odpowiedzi. W książce Erica Evansa jest wiele spostrzeżeń. Na przykład ograniczone konteksty. Paradygmat ograniczonego kontekstu jest jednym z filarów mikrousług, które budujemy dzisiaj. Czytanie książki pomaga również w zrozumieniu mikrousług.
Kerem Baydoğan,