Powiedziałbym, żeby nie zaczynać od TDD. Podejmij świadomą decyzję, kiedy poświęcisz więcej czasu na naukę strategii architektury w ogóle. TDD nie pozwoli ci pominąć pracy domowej, chociaż możesz zacząć w to wierzyć.
Oto mój problem z tym. Kiedy mówisz, że wydaje się, że dużo zmarnowanego czasu na rzeczy, które nigdy nie złamią TDDers, powiesz, że docenisz to, gdy jedna rzecz, której nie spodziewałeś się w ogromnym łańcuchu zależności, zostanie zerwana. Kiedy zauważysz, że nie można przewidzieć takich rzeczy przed napisaniem aplikacji, to jest ... dlaczego testujemy, mówią ci, że naprawdę chodzi o projektowanie, a nie testowanie, nawet jeśli testowanie jest przydatne.
Ale czy gigantyczne łańcuchy nieprzewidywalnych powiązanych zależności nie są produktem kiepskiego projektu?
Więc co to jest?
Oto myśl. Nie należy mieć przede wszystkim ogromnych złożonych łańcuchów zależności, biorąc pod uwagę następujące dwie zasady projektowania obiektowego z wzorców projektowych:
„Program do interfejsu, a nie implementacja”
Innymi słowy, twoje przedmioty nie powinny obchodzić, kto wykonuje powołanie i jak zostały wykonane. Tyle tylko, że wprowadzono odpowiednie argumenty i że metody, które wywołują z innych obiektów, są skierowane do pracy zgodnie z oczekiwaniami. Twój łańcuch zależności w większości przypadków powinien znajdować się w jednym punkcie połączenia, wywołaniu metody po stronie wywołującego i miejscu, w którym argumenty są wprowadzane do twoich metod. To tam logujesz się, sprawdzasz poprawność i wysyłasz przydatne wiadomości do debugowania, gdy coś się psuje.
I:
„Preferuj kompozycję obiektów nad dziedziczeniem klas”
Kim jest manekin? Facet, który zrobił coś z klasą w złożonym kaskadowym schemacie dziedziczenia obejmującym około 30 klas, co doprowadziło do zepsucia skrzynki, czy też deweloper, który wymyślił tę architekturę w pierwszej kolejności? TDD może pomóc ci dotrzeć do sedna problemów w tej krzywej wieży klasy Piza wcześniej niż mógłbyś to zrobić bez, ale czy to sprawia, że mniej bolesna jest próba zmodyfikowania jednego z punktów końcowych tej katastrofy kodu następnym razem?
I tutaj dochodzę do rzeczy, która mnie wkurza. Czy TDD naprawdę pomaga w projektowaniu, czy też umożliwia złą architekturę? Wydaje mi się, że może być samospełniającą się strategią. Im bardziej twój zespół nie musi ponosić odpowiedzialności za słabą architekturę, tym bardziej pomocne wydają się te szczegółowe testy, ale ostatecznie twoja aplikacja staje się coraz większą PITA do pracy (zakładając, że nigdy nie myślała o architekturze w pierwszej kolejności miejsce). Nieuwzględnienie konsekwencji tego jest oczywiste, zawsze jest to najdroższy błąd, jaki możesz popełnić podczas pracy z aplikacją, która ma być aktualizowana i modyfikowana w miarę upływu czasu.