Справедливости ради, он добавил «В шутку» к этому требованию.
До сегодняшнего дня я склонен начинать с моделирования систем с использованием подхода «существительное и глагол», но я обнаружил, что в течение многих лет TDD учит нас, что этот подход обращает ваше внимание на неправильную вещь. В этом смысле блогер имеет смысл. Однако я не уверен, что виноват именно этот подход, а не то, как работает наш разум.
Если вы хотите попробовать себя здесь, перестаньте читать и попробуйте смоделировать игру «Монополия», используя английский язык, а затем возвращайтесь сюда.
Я подозреваю, что соблазн будет состоять в том, чтобы немедленно посмотреть на объекты, с которыми мы много взаимодействуем - доска, места, карты, игральные кости, фигуры - но это не то, куда идет основная часть логики. Большинство из этих объектов совершенно тупые. Данные, если хотите.
Но как только вы начинаете писать тесты, вы понимаете, какой объект является самым важным в любой игре: правила.
Помните тот маленький кусочек бумаги, который вы прочитали один раз, когда впервые получили игру, и с которым больше не общаетесь, пока не возникнет спор? Компьютеризированная версия не работает таким образом. Все, что игрок пытается сделать, компьютер будет проверять правила и смотреть, разрешено ли это делать или нет.
Когда вы думаете об этом, вы делаете то же самое, но поскольку для чтения бумажных правил требуется время, а у вашего мозга разумная система кеширования, вы обращаетесь к правилам в своей голове. Вероятно, компьютеру снова будет легко читать правила - если только они не хранятся в базе данных, и в этом случае они тоже могут их кешировать.
И именно поэтому TDD так популярен для дизайна вождения. Потому что он быстро направляет ваш мыслительный процесс в нужные места:
Когда я думаю, что собираюсь написать несколько тестов для моей игры в монополию. Я мог бы посмотреть на свой набор и попытаться найти объекты. Итак, у нас есть эти кусочки. Я напишу несколько тестов для них.
Может быть, у меня будет базовый класс MonopolyPiece, и каждый тип элемента будет производным от них. Я начну с DogPiece. Первый тест ... ааа. На самом деле здесь нет логики. Да, каждая часть будет нарисована по-разному, поэтому мне может понадобиться DogDrawer, но пока я заканчиваю игру, я просто хочу написать «D» на экране. Я приправлю интерфейс в конце.
Давайте найдем реальную логику для тестирования. Таких домов и отелей много, но тесты не нужны. Денег нет Имущественных карт нет. И так далее. Даже доска - не что иное, как конечный автомат, она не содержит никакой логики.
Вы быстро обнаружите, что у вас в руке осталось три вещи. Карты Chance и Community Chest, пара костей и набор правил. Это будут важные части для проектирования и тестирования.
Вы видели это, когда писали существительные и глаголы?
На самом деле, в «Образцах и практиках гибких принципов» Роберта Мартина есть замечательный пример, когда они пытаются реализовать приложение «Счетная карта для боулинга» с использованием TDD и находить все виды вещей, которые, по их мнению, являются очевидными классами, просто не заслуживают внимания.