2014-12-24 12 views
5

Czytałem o DDD, że w obliczu tego ustępuKiedy nie powinniśmy stosować podejścia opartego na Domain-Driven Design?

dla danych operacji centric byś prawdopodobnie lepiej wyłączyć za pomocą coś jak Active Record wzór, a nawet DAL nad procedur przechowywanych. Możesz znaleźć pewne korzyści w niektórych pobieżnych aspektach DDD i być może używając jakiejś terminologii, ale próbując sprawić, by DDD pasował tutaj, nie będzie przyjemnym doświadczeniem.

jak ten:

Prawdopodobnie 95% wszystkich aplikacji wpaść w „nie tak dobre dla używając DDD” kategorie. Większość z nich to przede wszystkim DataCentric - większość stron internetowych to ... Większość aplikacji do aktualizacji danych i raportowania jest zorientowana na dane.

Co myślisz? Czy akceptujesz tę opinię? Zgodnie z tymi paragrafami nie mogliśmy użyć DDD do szerokiego wachlarza projektów IT, mogliśmy?

+2

Czy możesz podać odniesienia do tych odniesień? – StuartLC

+0

Aby uzyskać mniejszą liczbę opinii, powinieneś oświadczyć, kiedy uważasz, że DDD powinno być używane * gdzieś *, że te cytaty się obniżają. DDD to narzędzie używane w przypadkach, w których jest użyteczne. 95% oprogramowania również nie potrzebuje czegoś takiego jak baza danych NoSQL do obsługi ogromnych ilości danych. Dlaczego chcesz wziąć na siebie koszty, bez żadnych korzyści? –

+0

Drogi StuartLC Przeczytałem je w tym dokumencie na stronie 22, w dziale "Aplikacje do centrowania danych". http://hirschmann.indeca.de/de-DE/Info-Center/News/~/media/Domven_Driven_Design_-_Step_by_Step.ashx –

Odpowiedz

7

Podejmij te liczby po prostu jako pewne wartości oparte na doświadczeniu autora (książka Evansa została wydana ponad 13 lat temu, od tego czasu sytuacja się zmieniła).

Przede wszystkim rzeczą, którą (niestety) niewielu programistów rozumie, jest to, że DDD dotyczy sposobu myślenia, sposobu patrzenia na rzeczy. to jest to! Możesz więc użyć DDD w każdym projekcie, ponieważ wciąż musimy najpierw zrozumieć domenę, niezależnie od jej implementacji. Jeśli się okaże, że domena to tylko kilka struktur danych, nie musisz komplikować życia. Zwłaszcza jeśli budujesz "głupią" aplikację, czyli interfejs dla bazy danych.

Ale jeśli budujesz aplikację, która musi zrozumieć semantykę biznesową (koncepcje i zachowanie) w celu zautomatyzowania rzeczy, to jest to inna historia, a wszystkie te pojęcia DDD pomogą ci zbudować łatwiejszą w utrzymaniu aplikację.

Wszystko zależy od aplikacji i nawet w tej aplikacji rzeczy mogą się bardzo różnić. Powinieneś najpierw zrozumieć cel aplikacji, następnie domenę, którą próbuje reprezentować (jeśli tak jest) i wymyślić rozwiązanie dla każdego przypadku użycia. W jednej aplikacji możesz mieć wiele rzeczy związanych z CRUD i możesz być bardzo wydajny, pomijając wiele abstrakcji. Możesz mieć kilka ważnych pojęć i przypadków użycia, które wymagają znacznie lepszego zrozumienia i zaprojektowania. Ma również znaczenie, jak bardzo uważasz, że aplikacja zmieni się z czasem. Jeśli istnieją oznaki, które będą ewoluować w miarę upływu czasu, lepiej będzie trochę abstrakcjonować, ale tylko z punktu widzenia projektu. Wdrożenie wciąż może być CRUDy w tym momencie.

Jeśli traktujesz metodologię jako grupę myślenia i pojęć, możesz użyć jej wszędzie, ponieważ coś takiego jak DDD nie jest receptą na "jak to zrobić". Chociaż ma kilka konkretnych narzędzi, projektant aplikacji powinien zdecydować, czy są one dobre dla Twojej aplikacji.

Po prostu musisz użyć DDD, aby zdecydować, czy (całość) DDD może być użyta w niektórych częściach aplikacji. Ale znowu DDD oznacza podejście strategiczne, sposób myślenia.

Po prostu nie można wybrać rozwiązania od samego początku dla całej aplikacji.Zapoznaj się z problemami, które aplikacja stara się rozwiązać i użyj właściwego rozwiązania dla każdego problemu. Jeśli w końcu wszystko jest po prostu CRUD, to jest w porządku. Równie dobrze, jeśli tylko niektóre części są zaimplementowane za pomocą narzędzi taktycznych DDD, chodzi o to, aby znaleźć optymalne rozwiązanie problemu.

Podsumowując, poznaj i zrozum nasz sposób myślenia DDD (istnieje wiele wyjaśnień, skup się na projekcie, a nie na przepisach, ponieważ są one błędne), unikaj traktowania tego jako przepisu kodującego i po prostu go używaj, aby określić najlepsze podejście do potrzeb aplikacji.

+0

tnx MikeSW.indeed nasz projekt poinformuje o informacjach po stronie frontendu, że wszystkie zostały wyprodukowane przez machin. –

+0

, więc myślisz, że DDD może być całkowicie przydatne dla tego typu projektu, czy nie? –

+0

Skąd mogę to wiedzieć, nie wiedząc wiele o twoim problemie? Naprawdę, tylko ty możesz odpowiedzieć na to pytanie. – MikeSW

1

DDD to zbiór pomysłów. Kiedy mówisz, użyj ,, nie jestem pewien, co masz na myśli. Na przykład, powszechnie używany język jest prawdopodobnie dobrym pomysłem, jeśli zamieniasz firmę w kod. Przydatne mogą być również typy wartości.

Ale pomysły takie jak ograniczają kontekst i agregat korzenie? Rozwijanie w tym stylu będzie miało większy koszt, ponieważ projekt stanie się naturalnie bardziej złożony. W niektórych domenach problemów konieczne jest odizolowanie problemu domeny. A to dlatego, że problem jest trudny. Innymi słowy, 95% systemów nie rozwiązuje trudnych problemów, które uzasadniają koszt złożoności.

Lubię myśleć o DDD jako istniejącym w jakimś spektrum projektowym.
Coś jak:

<--CRUD----Active Record----Domain Model----DDD--> 

Od lewej do prawej, te pomysły wzrastać w złożoności. I naturalnie przemieszczasz się od lewej do prawej, kiedy rozwijasz projekt kodu. Dobrą praktyką jest odłożenie decyzji dotyczących projektowania (architektury) tak późno, jak to możliwe. Zawsze możesz zacząć od czegoś po lewej i przesuwać się w prawo.

+0

tnx drodzy Davin. Czuję, że jestem bliżej odpowiedzi. Znalazłem różne aspekty DDD przydatne jako postawę, ale myślę, że całość może być nierozsądna.więc myślę, że możemy wybrać prostszy sposób dla aplikacji, która będzie działała takiego reportera, bez żadnego wpisu danych lub pewnej logiki biznesowej. potwierdzasz to? –

3

Vaughn Vernon przywołuje w swojej wielkiej książce swoją DDD scorecard.

Jeśli twoja aplikacja jest ukierunkowana na CRUD, DDD będzie YAGNI.
W przeciwnym razie, jeśli twoja aplikacja jest naprawdę zorientowana na zadania, wychwytując konkretny zamiar użytkownika, DDD może ci naprawdę pomóc.

+0

nikt! nie jest zorientowany na CRUD, a nie zorientowany na zadania. Jest to brama, która będzie miejscem, w którym dane będą prezentowane. –

Powiązane problemy