Я б сказав, що не починати з TDD. Приймайте обгрунтоване рішення, коли ви витратили більше часу на вивчення архітектурних стратегій загалом. TDD не дозволить вам пропустити це домашнє завдання, хоча ви можете почати вірити, що це робить.
Ось моя проблема з цим. Коли ви кажете, що здається, що витрачається багато часу на речі, які ніколи не зірвуть TDDers, скажіть, що ви оціните це, коли розіб'ється та річ, яку ви не передбачили у величезному ланцюжку залежностей. Коли ви вказуєте, що неможливо передбачити подібні речі, перш ніж написати додаток, що таке ... чому ми тестуємо, вони говорять вам, що це справді більше про дизайн, а не про тестування, хоча тестування стане в нагоді.
Але хіба гігантські ланцюги непередбачуваних пов'язаних залежностей не є продуктом шаленого дизайну?
Так що це?
Ось думка. Не будемо мати величезних складних ланцюгів залежностей в першу чергу, розглядаючи наступні два принципи об'єктно-орієнтованого дизайну від «Шаблони дизайну»:
"Програма на інтерфейс, а не реалізація"
Тобто, вашим предметам не повинно бути байдуже, хто робить дзвінки або як вони були зроблені. Тільки те, що введені відповідні аргументи, і щоб методи, які вони викликали з інших об'єктів, на які вони спрямовані, працювали так, як очікувалося. Ваша ланцюг залежності в більшості випадків повинна знаходитися в одній точці зв’язку, виклик методу з боку абонента та місце, де аргументи потрапляють у ваші методи. Ось де ви реєструєтесь та перевіряєте та надсилаєте корисні повідомлення для налагодження, коли речі скачуються.
І:
"Композиція вподобаного об'єкта над успадкуванням класу"
Хто манекен? Хлопець, який щось робив для класу за згорнутою каскадною схемою успадкування, що включає 30 класів, що призводить до поломки корпусу, або дев, який придумав цю архітектуру в першу чергу? TDD може допомогти вам дійти до нижньої частини питань, що знаходяться в тій схиленій вежі класу Піза швидше, ніж ви могли б мати, але чи не робить це менш болісним спроба змінити одну з кінцевих точок катастрофи наступного разу?
І ось я дістаюся до речі, яка мене клопоче. Чи дійсно TDD допомагає в дизайні чи дозволяє погана архітектура? Мені здається, він має потенціал бути самореалізаційною стратегією. Чим більше вашій команді не потрібно нести відповідальність за погану архітектуру, тим кориснішими стають ті детальні компоненти для тестування, але в кінцевому підсумку ваш додаток стає все більшим ПІТА, з яким працюватимуть (якщо припустити, що вони ніколи не замислювалися над архітектурою в першу чергу місце). І невпізнання наслідків цього - це опускання рук, завжди найдорожча помилка, яку ви можете допустити, працюючи над додатком, який має бути оновлений і змінений з часом.