Читать «Рефакторинг с использованием шаблонов» онлайн - страница 12

Джошуа Кериевски

Со временем мои конструкторские способности усовершенствовались, и я нашел себя в разнообразном использовании шаблонов: я начал реорганизовывать код, используя шаблоны, применяя их иначе, вообще отказываясь от них вместо применения на предварительном этапе проектирования или вводя их в код на ранних этапах написания. Новый способ работы с шаблонами возник как развитие моей практики проектирования в экстремальном программировании (extreme programming, ХР), которая помогла мне избежать как избыточного, так и недостаточного проектирования (under-engineering).

Избыточное проектирование

Избыточное проектирование заключается в том, что вы делаете код более гибким или сложным, чем он должен быть. Некоторые программисты делают это, поскольку полагают, что им известно, какие требования к разрабатываемой системе могут появиться в будущем. Поэтому они считают, что лучше сделать более гибкий и сложный проект уже сегодня, чтобы он без изменений соответствовал завтрашним нуждам. Это звучит разумно, если, конечно, вы обладаете даром предвидеть будущее.

Если же ваши предсказания окажутся неправильными, вы потеряете драгоценное время и деньги. Нередко оказывается, что на получение чрезвычайной гибкости или отладку излишней сложности программного проекта тратятся лишние дни или недели, при этом остается все меньше времени для добавления новой, необходимой сегодня функциональности или для устранения имеющихся дефектов.

Что обычно происходит с кодом, созданным в ожидании потребностей, которые никогда не возникнут? Он никогда не удаляется. Это происходит не только потому, что удаление кода требует затрат труда и времени, но и потому, что вы постоянно ожидаете, не понадобится ли вам этот код в ближайшем будущем. Независимо от причины, с накоплением излишне гибкого или сложного кода вам (и прочим членам команды) приходится работать с базой исходных текстов, которая оказывается больше и сложнее, чем это необходимо. Особенно тяжело это для новичков в командной работе.

Для баланса коллектив зачастую решает разделить работу на изолированные подсистемы. На первый взгляд это облегчает работу, хотя и имеет неприятный побочный эффект, состоящий в написании большого количества повторяющегося кода (потому что каждый работает в своей собственной комфортабельной нише, из которой редко выглядывает, и не знает, что рядом уже есть код, который решает аналогичную задачу).

Избыточно спроектированный код влияет и на производительность: получив в наследство избыточно спроектированный проект, программисты должны потратить значительное время на изучение его особенностей, прежде чем начнут расширять или сопровождать такой проект.

Обычно избыточное проектирование не привлекает всеобщего внимания; многие архитекторы и программисты даже не осознают, что они избыточно проектируют. И когда организации обеспокоены спадом производительности команды, немногие понимают, что существенную роль в этом сыграло избыточное проектирование.