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
- Presenter
w 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. PresenterMock
Klasa 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 Interactor
PresenterMock
Use Case Interactor
Controller
Use 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.