Test Driven Development (TDD) nie jest projektem. Jest to wymóg, który wpływa na Twój projekt. Tak jak gdybyś musiał być bezpieczny w wątku, to nie jest projekt. Ponownie, jest to wymóg, który wpływa na twój projekt.
Jeśli z radością zignorujesz wszystkie inne obawy związane z projektowaniem i religijnie będziesz przestrzegać zasad TDD, nie obwiniaj TDD, gdy twój kod zamieni się w bzdury. To będzie bzdura, którą można przetestować, ale to będzie bzdura.
Jedną fajną rzeczą w bzdurach testowalnych jest to, że to badziewka refaktowalna, więc dla niektórych osób jest wystarczająco dobra. Będziemy fantazyjni tylko w razie potrzeby. Inni nienawidzą tego i obwiniają za to TDD. Nie. To twoja robota.
Domain Driven Design (DDD) to coś, co robisz przed cyklem refaktora TDD w kolorze zielonym i zielonym.
DDD to próba utworzenia i zachowania przestrzeni w kodzie, w której ekspert w dziedzinie, który jest w dużej mierze nieświadomy szczegółów systemu, może zrozumieć, jak kontrolować system. Odbywa się to poprzez abstrakcję i modelowanie problematycznej dziedziny w znany sposób.
System DDD może mieć architekturę, która wygląda następująco:

Ta architektura DDD ma wiele nazw: czyste , cebulowe , sześciokątne itp
Oto rozłączenie, które widzę wielu ludzi, kiedy patrzą na ten projekt. To nie jest konkretne. Mogę podążać za tym projektem i nigdy nie napisałem niczego, co widzisz na schemacie. Widzę, że inni twierdzą, że musi istnieć obiekt przypadku użycia lub klasa encji. To zestaw reguł, które mówią ci, z kim możesz rozmawiać i jak.
Otóż to. Postępuj zgodnie z zasadami tego projektu, a TDD możesz wyciszyć z serca. TDD nie obchodzi, z kim rozmawiasz. Dba o to, aby wszystko, co coś robi, mogło zostać sprawdzone za pomocą jednego kliknięcia. Nie, coś gdzieś jest zepsute. Mówi dokładnie, co jest zepsute.
Wciąż niejasne? Spójrz na diagram Controler- Use Case Interactor- Presenterw prawym dolnym rogu. Oto trzy konkretne rzeczy komunikujące się ze sobą. Jasne, że to DDD, ale jak tu dodać TDD? Po prostu kpij z konkretnych rzeczy. Prezenter musi otrzymywać informacje. PresenterMockKlasa byłby to dobry sposób, aby sprawdzić, że robi się to, czego oczekuje się dostać. Hand i napęd jak gdybyś był i masz dobry sposób na badanej jednostki ponieważ mock powie, czy to ma to, czego oczekuje się dostać.Use Case InteractorPresenterMockUse Case InteractorControllerUse Case Interactor
Spójrz na to. Zadowolony z TDD i nie musieliśmy wybiegać z naszym projektem DDD. Jak to się stało? Zaczęliśmy od dobrze oddzielonego projektu.
Jeśli używasz TDD do projektowania (nie tylko rozwoju ), otrzymujesz projekt, który odzwierciedla wysiłek włożony w to. Jeśli tego właśnie chcesz. Ale nigdy nie po to było przeznaczone TDD. To czego ostatecznie brakuje, z pewnością nie jest winą TDD.
TDD nie dotyczy projektowania. Jeśli musisz wprowadzić zmiany w projekcie, aby używać TDD, masz większe problemy niż testowanie.