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

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

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

Архитектурный рефакторинг против рефакторинга кода

Архитектурный рефакторинг обычно включает также рефакторинг кода, что приводит к путанице между ними. Как говорит Мартин Фаулер, рефакторинг кода реструктурирует код, чтобы сделать его более удобным для сопровождения без изменения его наблюдаемого поведения. При рефакторинге кода вы сосредотачиваетесь на программных объектах, таких как пакеты, классы и методы.

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

Как выполнить архитектурный рефакторинг

«Архитектура — это то, что трудно изменить» — Мартин Фаулер.

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

  1. Понимать и визуализировать текущую архитектуру. Матрица структуры зависимостей (DSM) — отличный способ визуализировать текущую архитектуру (посмотрите наше видео Как читать матрицу структуры зависимостей). Это быстро даст вам представление о компонентах вашей программной системы и о том, как они связаны друг с другом. Обладая этими знаниями, вы можете обнаружить, что ваши системы или компоненты слишком тесно связаны или слишком зависят друг от друга.
  2. Определите, какие архитектурные изменения необходимы. Например, если у вас есть монолитное приложение, возможно, ответом будет разделение его на несколько модулей или сервисов (микросервисы).
  3. Разработайте высокоуровневый план рефакторинга. Составьте рабочий список элементов, которые необходимо исправить. Если вы используете такой инструмент, как Lattix Architect, вы можете настроить правила, чтобы убедиться, что будущие сборки не нарушат вашу предполагаемую архитектуру (посмотрите наше видео Как указать архитектурные правила).
  4. Контролируйте архитектуру во время рефакторинга. Архитектурный рефакторинг следует проводить поэтапно. Необходимо отслеживать архитектуру, чтобы убедиться, что она движется к чистому состоянию и не вносятся новые архитектурные нарушения.

Резюме

Архитектурный рефакторинг — это больше, чем техническая задача. Речь идет о создании правильного кейса и продаже ваших идей. Всегда не забывайте определять ценность для бизнеса, связанную с усилиями по рефакторингу, чтобы оправдать затраты. Это может быть повышение производительности, сокращение времени простоя, более быстрая доставка и время выхода на рынок, а также улучшение качества. Наконец, необходимо постоянно контролировать архитектуру программного обеспечения, потому что по мере развития программного обеспечения архитектура приходит в упадок. Чем дольше архитектура остается неконтролируемой, тем дороже архитектурный рефакторинг. Такое решение, как Lattix Architect, предназначенное для архитектурного рефакторинга, может упростить этот процесс.

Первоначально эта статья появилась в Блоге архитектуры Lattix.