|
(В оригинале Architectural Tradeoffs)
Каждый проектировщик ПО должен понимать, что невозможно сделать все и сразу. Невозможно разработать архитектуру, которая была бы высокопроизводительной, стабильной, безопасной и с высокой степенью абстракции на всех уровнях. Есть один реальный пример, знать который рекомендуется каждому архитектору. Это история корабля Васа.
В 1620-м году шла война между Швецией и Польшей. Желая побыстрее завершить эту разорительную войну, шведский король начал строительство корабля, названного Васа. Это должен был быть не простой корабль. Требования к нему были уникальными для того времени. Он должен был быть более 60 метров в длину, нести 64 пушки на двух оружейных палубах, и иметь возможность перевозить 300 солдат на борту. Сроки были критичны, денег было мало (звучит знакомо, не так ли? :) Дизайнер корабля никогда до этого не проектировал корабли такого класса. Он был экспертом в постройке кораблей меньшего класса, однопалубных. Тем не менее, он экстраполировал свой предыдущий опыт и спроектировал Васа. Корабль был успешно построен по его спецификациям, и в день запуска корабль гордо вышел в гавань, отсалютовал из своих пушек и практически сразу же затонул.
Проблема корабля оказалась тривиальной – палуба боевых кораблей тех лет была обычно тесным и опасным местом, особенно в бою. Постройка же корабля, одновременно являющегося и боевым, и транспортным, оказалась дорогой ошибкой. Архитектор, желая удовлетворить желания короля, построил слишком неустойчивый корабль.
Попытка удовлетворить все требования может привести к нестабильной архитектуре и как следствие, неудовлетворительной реализации всех требований. Хорошим примером может быть требование создать серверную архитектуру, хорошо работающую и для случаев «точка-точка». Чтобы сделать такое, вам придется серьезно нарушать уровни абстракций, созданные для серверной версии, приводя к тому, что архитектура становится похожей на одно из блюд итальянского ресторана. Существует несколько инструментов, позволяющих определить и выявить альтернативы при разработке архитектуры. Две популярные методологии, делающие это - Architecture Tradeoff Analysis Method (ATAM) и Cost Benefit Analysis Method (CBAM). Подробнее про эти методологии можно почитать на сайте Software Engineering Institute здесь и здесь.
Автор оригинала - Mark Richards
|