функциональность и атрибуты качества ортогональны. Это утверждение, которое поначалу может показаться излишне смелым, на самом деле совершенно справедливо — по-другому просто не может быть. Если бы функциональность и атрибуты качества не были ортогональны, уровень защиты, производительности, готовности или практичности определялся бы выбранной функцией. Очевидно, что устанавливать нужный уровень этих характеристик можно произвольно. Мы не имеем в виду, что любая функция дает возможность реализовать любой атрибут качества на любом уровне. Операции обработки сложных графических данных или сортировки огромной базы данных сложны по определению и, следовательно, не позволяют достичь молниеносной производительности. Сомнению не подлежит лишь то, что в отношении любой из этих функций относительный уровень качества определяется решениями, которые принимает архитектор. Некоторые архитектурные решения способствуют повышению производительности, иные же приводят к обратному эффекту. В этом контексте целью настоящей главы, как и любой хорошей архитектуры, является разделение задач. Мы разберем все важные атрибуты качества по порядку и покажем, как их структурировать.
Что такое функциональность? Это способность системы выполнять те задачи, которые на нее возложены. Для выполнения любой задачи элементы системы — все или некоторые — должны работать согласованно; аналогичным образом в ходе строительства дома взаимодействуют монтажники, электрики, кровельщики, штукатуры, маляры и отделочники. Таким образом, если обязанности между элементами распределены неправильно или если у них нет средств координации с другими элементами (они требуются для того, чтобы элементы могли своевременно приступать к исполнению своих обязанностей), система не сможет обеспечить надлежащую функциональность.
Для обеспечения функциональности существует множество разных структур. Если бы функциональность была единственным требованием, систему можно было бы организовать в виде единичного монолитного модуля безо всякой внутренней структуры. В действительности системы разлагаются на модули, которые делают ее более понятной и поддерживают решение ряда других задач. Функциональность, таким образом, не сильно зависит от структуры. Когда существенную роль начинают играть другие атрибуты качества, программная архитектура ограничивает распространение функциональности по структурам. К примеру, но многих случаях декомпозиция структур проводится таким образом, чтобы их конструированием могли заниматься сразу несколько специалистов (помимо прочего, такое решение оптимизирует срок выхода продукта на рынок, хотя в этом ключе оно рассматривается весьма редко). Очень важно, как функциональное! ь пересекается с другими атрибутами качества и одновременно ограничивает их.