Справедливості, він додав до цього твердження "Забавку".
До сьогоднішнього дня я, як правило, починаю з моделювання систем, використовуючи підхід "іменник і дієслово", але я виявив, що протягом багатьох років TDD вчить нас, що цей підхід звертає вашу увагу на неправильну річ. У цьому сенсі у блогера є пункт. Однак я не впевнений, що це вина підходить, а не те, як працює наш розум.
Якщо ви хочете спробувати тут невеликий виклик, перестаньте читати і спробуйте моделювати гру «Монополія», використовуючи англійську мову, а потім поверніться сюди.
Я підозрюю, що спокуса буде негайно подивитися на об'єкти, з якими ми багато взаємодіємо - дошку, пробіли, карти, кубики, шматки, - але не в цьому іде основна логіка. Більшість із цих об’єктів абсолютно німі. Дані, якщо хочете.
Але як тільки ви почнете писати тести, ви зрозумієте, який об’єкт на сьогоднішній день є найважливішим у будь-якій грі: правила.
Пам’ятайте той маленький папірець, який ви прочитали один раз, коли ви вперше отримали гру і не спілкуєтесь знову, поки не виникне суперечка? Комп'ютеризована версія не працює таким чином. Кожна річ, яку намагається зробити гравець, комп'ютер проконсультується з правилами і побачить, чи їм це дозволяється чи ні.
Коли ви думаєте про це, ви робите те саме, але оскільки вам потрібен час, щоб прочитати правила на основі паперу, і ваш мозок має розумну систему кешування, ви консультуєтесь з правилами в голові. На комп’ютері, ймовірно, знову буде легко прочитати правила - якщо вони не зберігаються в базі даних, і в цьому випадку він також може кешувати їх.
І саме тому TDD настільки популярний для фактичного водіння дизайну. Оскільки це, як правило, швидко спрямовує ваш розумовий процес у потрібні місця:
Коли я думаю, що збираюся написати кілька тестів на свою гру «Монополія». Я можу переглянути свій набір і спробувати знайти предмети. Отже, у нас є ці шматки. Я напишу для них кілька тестів.
Можливо, у мене буде базовий клас MonopolyPiece, і кожен тип твору буде виходити з них. Почну з DogPiece. Перший тест ... ах. Насправді тут логіки немає. Так, кожен твір буде намальований по-різному, тому мені може знадобитися DogDrawer, але, поки я розгортаю гру, я просто хочу написати "D" на екрані. Я підправлю інтерфейс користувача наприкінці.
Давайте знайдемо деяку фактичну логіку для тестування. Таких будинків і готелів дуже багато, але тести на них не потрібні. Гроші, ні. Картки власності, немає. І так далі. Навіть дошка - це не що інше, як державна машина, вона не містить логіки.
Ви швидко знайдете, що у вас залишилися три речі. Картки шансу та спільноти, пара кісток та набір правил. Це будуть найважливіші частини для проектування та тестування.
Чи бачили ви це, коли ви пишете іменники та дієслова?
Насправді є чудовий приклад у «Швидких принципах та принципах принципів Роберта Мартіна», де вони намагаються скласти програму «Боулінг-карта» за допомогою TDD і знайти всілякі речі, які, на їх думку, були очевидними класами, з якими просто не варто займатися.