Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Архитектура и проектирование программных систем

Слои в архитектуре ПС. Паттерн выделения слоев

Концепция слоев - одна из общеупотребительных моделей, используемых разработчиками программного обеспечения для разделения сложных систем на более простые части (см. главы 2 и 6). В архитектурах компьютерных систем, например, различают слои кода на языке программирования, функций операционной системы, драйверов устройств, наборов инструкций центрального процессора и внутренней логики микросхем. В главе 2 отмечалось, что если система разбита на ряд слоев, то слой п - это набор компонентов системы, которые используют только компоненты слоя п— 1 и могут быть использованы только компонентами слоя п + 1.

Слой п + 1 использует слой п, следовательно, абстракция понятий слоя п + 1 по меньшей мере не ниже, чем у слоя п, а в идеале, если архитектура системы эффективна, то уровень абстракции слоя должен быть выше. Соответственно, слой п скрывает (инкапсулирует) логику работы с понятиями, определенными на этом слое, позволяя, таким образом, слою п + 1 реализовать работу с более сложными понятиями, организовать более сложную логику, используя выразительные средства нижележащего слоя. Можно выбирать альтернативную реализацию базовых слоев: компоненты верхнего слоя способны работать без каких-либо изменений в нижележащих слоях при условии сохранения интерфейсов. Зависимость между слоями, т.е. фактически интерфейсы, предоставляемые нижними слоями верхним, можно свести к минимуму. Такая минимизация интерфейсов позволяет увеличивать гибкость системы.

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

В статье [15] рассматривается один из паттернов выделения слоев-представитель целого семейства паттернов выделения слоев. Подвидов у этого паттерна существует достаточно много, и каждый из них обладает своей спецификой. Рассматриваемый паттерн имеет следующую структуру (следуя терминологии автора статей).

Имя: выделение слоев.

Ситуация: на диаграмме представлены элементы, для которых верны следующие условия:

  • • исходящие связи ведут только в последний выделенный слой (слой с номером п) или их нет, если ранее не был выделен ни один слой;
  • • «кандидаты на объединение в новый слой» с номером п + 1 должны обладать общим смыслом и (или) функциональностью (простейшей проверкой на наличие общности является простой критерий: если для кандидатов можно подобрать «общее определение», то можно считать, что они обладают требуемой общностью).

Рецепт: объединить блоки в новый слой п + 1. Для двух произвольных слоев слой, обладающий большим порядковым номером, считается вышележащим. Если в результате применения паттерна было выделено п слоев и еще остались блоки, которые в силу ограничений не смогли быть отнесены ни к одному из выделенных слоев и формально не могут быть выделены в новый слой, то эти блоки по умолчанию считаются п + 1 слоем, который в дальнейшем именуется чердаком.

Различают строгие слои, которые не допускают никаких отклонений в строгой структуре, и потому встречаются относительно редко, и нестрогие слои. Последние допускают связи вышележащего слоя с несколькими нижележащими слоями (потенциально - со всеми), а не только с непосредственным соседом снизу. Как отмечается в [14], архитектура с нестрогими слоями может быть как результатом эрозии, так и осознанным решением. Возможным дефектом архитектуры с нестрогими слоями является нарушение абстракции. Это затрудняет анализ системы. Кроме того, изменения слоя в такой архитектуре значительно сложнее локализовать: волна изменении прокатится по всем слоям, работающим с изменяемым слоем.

Как показано в главе 6, рассмотренные виды слоев можно модифицировать, позволив включать в произвольные слои сильносвязанные компоненты (СК). При таком подходе сильносвязанные компоненты рассматриваются фактически как атомарный элемент. Слои, содержащие СК, в [14] названы поглощающими. Без подобного смягчения условий как сам СК, так и все блоки, которые могли бы попасть в вышележащие слои, будут отправлены на чердак. Заметим, что не всегда СК на структурных диаграммах свидетельствуют о плохой архитектуре системы. Возможным дефектом архитектуры с поглощающими слоями может стать эффект пропавшего слоя: дефектная связь приводит к появлению СК, которые по смыслу должны находиться на разных слоях.

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

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

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

  • 1. Каталогизация. Направление, связанное с дальнейшим сбором, обобщением и классификацией паттернов рефакторинга.
  • 2. Автоматизация. Представляет большой интерес возможность облегчения и автоматизации применения как существующих, так и вновь предлагаемых паттернов.
  • 3. Верификация. Вызывает интерес возможность верификации сохранности поведения программной системы при архитектурном рефакторинге.
  • 4. Направленность. Желательно вооружить разработчика, знающего паттерны архитектурного рефакторинга и имеющего соответствующие инструменты моделирования, процедурой, определяющей последовательность применения паттернов, чтобы сделать процесс эффективным. Создание подобных процедур представляет значительный исследовательский интерес.
 
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Пред   СОДЕРЖАНИЕ   След >
 

Популярные страницы