Я намагаюся обернути голову навколо TDD, зокрема частини розробки. Я переглянув деякі книги, але ті, з яких я знайшов, в основному стосуються тестової частини - історії NUnit, чому тестування хороше, Red / Green / Refactor та як створити калькулятор струн.
Хороший матеріал, але це "просто" модульне тестування, а не TDD. Зокрема, я не розумію, як TDD допомагає мені отримати гарний дизайн, якщо мені потрібен дизайн, щоб почати його тестувати.
Для ілюстрації уявіть собі ці 3 вимоги:
- У каталозі має бути список товарів
- У каталозі слід пам’ятати, які продукти переглядав користувач
- Користувачі повинні мати можливість шукати товар
У цей момент багато книг витягують чарівного кролика з шапки і просто занурюються в «Тестування ProductService», але вони не пояснюють, як вони дійшли висновку, що в першу чергу існує ProductService. Ось та частина "розвитку" в TDD, яку я намагаюся зрозуміти.
Потрібно мати існуючий дизайн, але речі, що не входять до організацій-служб (тобто: Продукт, тому має бути Служба продуктів), ніде не знайдено (наприклад, друга вимога вимагає від мене певного поняття Користувач, але де я міг би нагадати цю функціональність? І чи пошук є функцією ProductService або окремої SearchService? Як я можу знати, що мені вибрати?)
Згідно з SOLID , мені знадобиться UserService, але якщо я спроектую систему без TDD, я можу закінчитися цілою купою сервісів з однометодними методами. Чи не призначений TDD спочатку змусити мене відкрити свій дизайн?
Я розробник .net, але ресурси Java також працюватимуть. Я відчуваю, що, здається, немає справжньої прикладної програми чи книги, яка стосується реальної ділової програми. Чи може хтось надати наочний приклад, який ілюструє процес створення дизайну за допомогою TDD?