Найти тему
Андрей Кузнецов

Архитектура приложения и кода

Привет, сегодня пишу про архитектуры. Сам термин многолик и многообразен, существует огромное количество разных архитектур, архитектуры уровня предприятий, архитектуры уровня кода, приложения, базы данных, в обще много разных, архитектур. Определений тоже очень много, но все они сводятся к тому, что архитектуры — это выделение главного, главных элементов, компонентов и установка связи между ними. В этом смысле архитектура является не процессом, который нужен сам для себя, а инструментом для управления сложностью разработки программного обеспечения. С архитектурой всегда всё сложно, дело в том, что тупое применение всех шаблонов и принципов, которые есть для архитектурного проектирования приводит к построению не очень удачных архитектур. Здесь нужно соблюдать баланс, потому что любое усложнение архитектуры ведёт к усложнению и программного кода, и декомпозиции компонентов, а это в свою очередь ресурсы, затраты и не всегда они оправданы. В этой статье я хочу рассказать про архитектуру уровня приложения, архитектуру уровня кода, что это такое с чем их едят, и для чего они нужны.

Архитектура уровня приложения

Здесь определяется то каким образом будет разруливаться требования к системе, к приложению, здесь определяется способ взаимодействия с инфраструктурой с ресурсами с внешним миром, и самое главное здесь определяется изоляция компонентов. Которая позволяет подключать к проекту разные команды, разных разработчиков, позволяет заниматься поиском неисправностей, характер неисправности говорит о том компоненте, где они возникли и таким образом локализует проблему. Хорошая архитектура уровня приложения подразумевает хорошую декомпозицию на компоненты, изоляцию этих компонентов, и высокую производительность при обмене данными, между этими компонентами. У нас есть хорошие проверенные шаблоны: это многослойная архитектура, это реактивная архитектура, это микроядерная архитектура, pipeline архитектура и так далее. Архитектуры уровня приложения достаточно проработаны и популярны, но на этом уровне в основном работают архитекторы. Здесь не определяется ни чего связанного с реализацией и программированием. Это самый верхний уровень и программисты не всегда имеют туда вход. Потому, что если у нас большое приложение, то программисты работают на уровне своих компонентов, и ничего не знаю о уровне приложения. Задачей этого уровня является максимизация, таких свойств как: быстродействие программного обеспечения, устойчивость к изменениям, отказоустойчивость и открытость к изменениям. Правильно спроектированный уровень программного обеспечения, позволяет нам обеспечить лёгкое внедрение новой функциональности, развития системы, готовность к нагрузкам, изменениям и другим факторам, сопутствующим разработке программного обеспечения.

Архитектура уровня кода

Однако основная часть по реализации ложиться на уровень кода, здесь работают уже непосредственно разработчики. После того как мы сделали декомпозицию, изолировали их компоненты необходимым образом, каждый компонент начинает опускаться ниже и уже разрабатывается своей группой разработчиков. На уровне кода функционирует каждый разработчик, это его ежедневная обязанность. Здесь происходит выбор алгоритмов, выбор структуры данных, выбор шаблонов проектирования. То есть вся магия, связанная с конкретикой и разработкой программного обеспечения, происходит на уровне кода. Точно также как и на уровне приложения, важно понимать, что изоляция и ограниченность связи компонентов друг с другом, это залог успеха хорошей архитектуры. Важно понимать, что чрезмерное увлечение паттернами, это плохо. Паттерны на уровне кода, это дополнительная реорганизация кода, дополнительное внесение новых структур в код, необходимость дополнительного тестирования, а любые дополнительные работы целесообразны только тогда, когда у в них есть необходимость. Поэтому если ваш код работает стабильно, быстро, вы не испытываете проблем с внедрением новой функциональности и не испытываете проблем с ошибками, то стримиться переписать всё на паттерны глупо. С другой стороны, если вы чувствуете, что изменения даются вам тяжело, если вы чувствуете, что монолитность ваших конструкций, влияет на качество вашего кода, и вы хотите это всё разбавить и сделать более управляемым вот здесь да, использование паттернов и принципов вполне себе оправдано.

Таким образом мы разобрали два основных уровня архитектуры. Уровень для разработки программного обеспечения — это уровень приложения, где происходит основные решения, связанные с декомпозицией, изоляцией компонентов, взаимосвязи с инфраструктурой и внешним миром. И уровень кода, где происходит реализация, в которой использование алгоритмов и архитектуры применяется по необходимости.