При планировании наперед
TDD не запрещает планирование наперед. Процесс заключается в получении быстрой обратной связи о ваших планах вместо того, чтобы тратить дни (или недели) на создание тщательно продуманных планов, только для того, чтобы увидеть, как они «не выдерживают контакта с реальностью» (перефразируя Хельмута фон Мольтке). Можно думать наперед.
Тем не менее, Кент Бек показывает в главе 17, что это не его первое родео: Я могу придумать. Я использовал его в качестве примера в печати еще полдюжины раз. Я программировал его вживую [...] на сцене еще пятнадцать раз. Я кодировал еще три или четыре раза, готовясь к написанию [... ] Затем, когда я писал это, я подумал об использовании выражения в качестве метафоры, и дизайн пошел в совершенно другом направлении, чем раньше ».
Итак, если вы думаете что он обманывает: да, он . Однако он открыто об этом говорит. Я думаю, что мотивация заключалась в том, чтобы показать убедительный пример. Он также пишет, что частично это было основано на ранних обзорах книги.
Об API
Это не объясняет, почему код выглядит так, но для этого есть причина. . На самом деле это хороший API.
Почему вы не можете написать что-то вроде return new Expression(amount + addend.amount, currency).reduce()
?
Вы не можете, потому что метод reduce
не является нулевым. Требуются аргументы. Вы должны указать как банк (в котором хранятся курсы конвертации валют), так и валюту назначения.
Помните, что проблема решается с помощью кода. Люди все время ошибаются, и я думаю, что Кент Бек (непреднамеренно) усугубил путаницу, назвав пример Деньги .
Проблема не в моделировании денег , но для моделирования инвестиций портфеля ios в разных валютах. Если у вас есть портфель в 25 000 долларов США и 10 000 швейцарских франков, сокращение его до единой валюты скрывает важные детали. Имея портфель в нескольких валютах, вы диверсифицируете риски. Владельцы портфолио захотят увидеть более одного вида своего портфеля ios. Иногда они хотят видеть портфель, сгруппированный по валютам, а в других случаях они хотят видеть «текущую общую стоимость» портфеля, представленного в одной валюте.
API в книге позволяет использовать оба представления.
Причина, по которой основная «метафора» называется выражением , заключается в том, что API - это просто специализированное дерево выражений. Но получается неплохо, потому что это законно. Ограниченный подтипами, представленными в книге, неформально порождает моноид .