Полтора года назад, когда я только стартанул блог, я опубликовал статью в которой дал свое определение архитектуры:
Это совокупность решений в организации проекта, обеспечивающие удобство работы и масштабируемость, а так же замедление роста когнитивной сложности.
Но это определение, как вы можете заметить, не очень точное.
Т.к. содержит в себе субъективное восприятие через призму личного опыта.
Давайте постараемся это исправить.
🔸И начнем мы с определения от Мартина Фаулера:
Architecture is about the important stuff. Whatever that is.
Архитектура — это про самое важное. Что бы это ни было.
Who Needs an Architect?
Черт, Мартин... Отдаю должное тебе за вклад и работу, но кажется, что с высоты твоего опыта, в дело вступило проклятие знаний.
И такое определение больше запутывает, нежели отвечает на вопросы 😐
🔸Благо университет Carnegie Mellon в 2017 году выпустил статью What is your definition of software architecture?, из которой мы сможем проанализировать несколько определений и выделить в них ключевое.
Начнем с стандарта IEEE:
Архитектура определяется как фундаментальная организация системы, выраженная через её компоненты, их взаимоотношения друг с другом и с окружающей средой, а также принципы, управляющие её дизайном и развитием.
DOI: 10.1109/IEEESTD.2000.91944
Стандарт не был бы таковым, если бы предлагал лишь один абзац.
Он так же связывает понятие архитектуры с заказчиком, его видением и того как создаются требования (см. картинку прикрепленную к посту)
Если наберем 💯 реакций, я разберу стандарт подробно в отдельной статье 😎
🔸Интересное определение предлагает нам Rational Unified Process:
Архитектура — это набор ключевых решений об организации системы, её структурных элементов, интерфейсов, поведения и их объединения в подсистемы, определяемый выбранным стилем.
🔸Следующее определение предложил создатель модели COCOMO:
Архитектура программной системы включает в себя:
• Набор программных и системных компонентов, соединений и ограничений.
• Набор требований заинтересованных сторон системы.
• Обоснование, показывающее, что компоненты, соединения и ограничения определяют систему, которая при реализации удовлетворит требования заинтересованных сторон.
Barry Boehm
И у всех этих определений, которые предложены в разные время разными людьми есть кое что общее:
🔹Архитектура — это набор ключевых решений и ограничений
🔹Решения и ограничения должны удовлетворять требованиям заинтересованных сторон
🔹Решения и ограничения определяют организацию системы
🔹Система выражается через компоненты и способы связи между ними
И мы можем из этого общего собрать термин, который емко дает всю необходимую информацию и согласован со стандартом:
Архитектура — это принятие ключевых решений, которые удовлетворяют требованиям заинтересованных сторон, о правилах и ограничениях, которые определяют структуру, элементы и способы их связи в системе.
Не хочется раздувать определение, вводя дополнительные комплексные понятия, но я бы еще сделал пометку на полях:
И желательно чтобы эти решения замедляли рост когнитивной сложности проекта 😬
Но в чем точно я не ошибся, когда писал пост полтора года назад, так это в том, что архитектура это далеко не только код!
Но об это по порядку в следующих статьях 🫡
Ты знаешь кому переслать этот пост.
Ставь 👍 если тебе по кайфу такая движуха
#аббревиатуры@UniArchitect
