под д елывать реализацию и выполнять рефакторинг. Я над еюсь, что
благод аря этому вы увид ите, каким образом в TDD выполняется
контроль над величиной шагов.)
Сказав, что планирую увеличить скоро сть, я немед ленно замед ляю
процесс разработки. Од нако я не планирую замед лять процесс написания
код а, который обеспечивает успешное тестирование. Я
планирую
замед лить процесс написания самих тестов. Некоторые ситуации и
некоторые тесты требуют тщательного обд умывания. Каким образом
мы планируем пред ставить арифметику со смешанными валютами? Это
как раз тот случай, когд а требуется тщательное обд умывание.
Наиболее важное и сложное ограничение, с которым нам
приход ится иметь д ело, заключается в том, что мы не хотим, чтобы код
нашей системы знал о существовании каких-либо валют. Нам хотело сь
бы, чтобы система имела д ело с д еньгами и не зависела от того, в какой
валюте они пред ставлены. Возможная
стратегия со стоит в том, чтобы
немед ленно преобразовывать любые д енежные значения в некоторую
ед иную валюту (попробуйте угад ать, какая валюта является самой
любимой у американских программистов). Од нако под обное решение не
позволит нам с легко стью варьировать соотношения (курсы обмена)
межд у различными валютами.
Вместо этого мы хотели бы найти решение, которое позволило бы
нам в уд обной форме реализовать механизм обменных курсов и при этом
обеспечить запись арифметических
выражений в форме, близкой к
станд артной арифметической записи.
Решение о сновано на объектах. Если имеющийся объект вед ет себя
не так, как нам хотело сь бы, мы созд аем еще од ин объект, облад ающий
точно таким же внешним протоколом, но отличающейся внутренней
реализацией. Этот шаблон называется «Самозванец» (Imposter).
Возможно, многим это покажется хиромантией. Каким образом в
д анной ситуации можно использовать шаблон «Самозванец»? Од нако я
не собираюсь шутить над вами – не существует формулы, позволяющей
генерировать гениальные д изайнерские решения.
Решение проблемы
было прид умано Уорд ом Каннигемом д есятилетие назад . Я еще не
встречал человека, который независимо от Уорд а прид умал бы нечто
под обное. К сожалению, метод ика TDD не гарантирует генерацию
гениальных ид ей. Вместе с тем
благод аря TDD вы имеете тесты,
формирующие вашу уверенно сть в код е, а также тщательно вылизанный
код , – все это является хорошей почвой д ля возникновения ид еи и ее
воплощения в реально сть.
Итак, что же является решением в нашем случае? Пред лагается
созд ать объект, который вед ет себя как объект Money, од нако
соответствует сумме д вух объектов Money. Чтобы объяснить эту ид ею,
я пробовал использовать несколько разных метафор. Например, можно
рассматривать сумму различных
д енежных величин как
Do'stlaringiz bilan baham: