- •Введение
- •1. Цели и задачи архитектора информационных систем
- •1.1. Цели создания информационных систем
- •1.2. Базовые структуры информационных систем
- •1.3. Уровни реализации архитектуры ИС
- •1.4. Атрибуты качества информационных систем
- •1.5. Сопровождение бизнес-ориентированных ИС
- •2.2. Структурное программирование
- •2. Парадигмы программирования
- •2.1. Модульное программирование
- •2.4. Функциональное программирование
- •2.5. Общие тенденции развития парадигм программирования
- •3. Чистая архитектура
- •3.1. Кричащая архитектура
- •3.2. Принципы SOLID
- •3.2.1. Принцип единственной ответственности
- •3.2.2. Принцип открытости/закрытости
- •3.2.3. Принцип подстановки Б. Лисков
- •3.2.4. Принцип разделения интерфейсов
- •3.2.5. Принцип инверсии зависимостей
- •3.3. Программные компоненты и принципы их организации
- •3.3.1. Диаграмма компонентов
- •3.3.2. Принципы взаимосвязи компонентов
- •3.3.3. Принцип эквивалентности повторного использования и выпусков
- •3.3.4. Принцип согласованного изменения
- •3.3.5. Принцип совместного повторного использования
- •3.3.6. Сравнение принципов взаимосвязи компонентов
- •3.4. Компонентный подход как способ динамического изменения архитектуры ИС
- •3.4.1. Принцип ацикличности зависимостей
- •3.4.2. Принцип устойчивых зависимостей
- •3.4.3. Принцип устойчивости абстракций
- •3.4.4. Графическая интерпретация принципов SDP и SAP
- •3.5. Вычислительные архитектуры ИС
- •3.5.1. Клиент-серверная архитектура
- •3.5.2. Трёхзвенная архитектура
- •3.5.3. Микросервисная архитектура
- •3.6. Шаблоны и антишаблоны проектирования ИС
- •3.6.1. Шаблоны проектирования
- •3.6.2. Антишаблоны проектирования
компоненты должны включаться классы, изменяющиеся в разное время и по разным причинам. По сути, принцип CCP представляет собой принцип SRP, перефразированный для компонентов. Важным требова-
нием принципа согласованного изменения является то, чтобы компо-
нент не имел нескольких причин для изменения.
Так как невозможно полностью закрыть компоненты от измене-
ний, то данная цель носит исключительно стратегический характер.
Классы должны проектироваться так, чтобы они были закрыты для из-
менений, наиболее типичных из ожидаемых по опыту. Принцип CCP
развивает эту идею, предписывая объединять в один компонент только классы, закрытые для одного и того же вида изменений. То есть увели-
чивает вероятность, что изменение требований повлечёт необходимость изменения минимального количества компонентов.
С точки зрения надёжности ИС CCP даёт следующие преимущест-
ва:
–умеренное число выпусков новых версий системы;
–ограничение группы пользователей, затрагиваемых выпуском новой версии;
–ограничение группы тестировщиков, проверяющих каждый но-
вый выпуск системы.
3.3.5. Принцип совместного повторного использования
Принцип совместного повторного использования формулируется следующим образом: пользователь компонента не должен быть зависим от того, что ему не нужно. В данном случае под пользователем в пер-
вую очередь понимаются другие программные модули системы (или взаимосвязанных систем).
41
Принцип совместного повторного использования – принцип, кото-
рый способствует определению того, какие классы и модули должны включаться в компонент. Он указывает, что в компонент должны вклю-
чаться классы и модули, используемые совместно. Классы редко ис-
пользуются по отдельности, а многократно используемые классы взаи-
модействуют с другими классами, являющимися частью многократно используемой абстракции.
Принцип совместного повторного использования говорит не толь-
ко о том, какие классы должны включаться в компонент, но и о том, ка-
кие классы не должны объединяться, а именно классы, не имеющие тесной связи. Когда один компонент использует другой компонент, они автоматически образуют зависимость. Использующий компонент мо-
жет нуждаться только в одном классе из используемого компонента, но это не ослабляет зависимости. Использующий компонент все так же за-
висит от используемого компонента. Из-за этой зависимости изменение используемого компонента влечёт необходимость тех или иных изме-
нений в использующем компоненте.
Другими словам, классы, включаемые в компонент, должны быть неотделимы друг от друга, чтобы нельзя было зависеть от одних и не зависеть от других. Иначе придётся повторно выпускать больше ком-
понентов.
3.3.6. Сравнение принципов взаимосвязи компонентов
Если ИС реализует принципы REP и CCP, то это ведёт к чрезмерно высокой частоте выпусков системы. Если ИС связывает между собой
REP и CRP, то это ведёт к большому размеру обновлений компонентов за один выпуск. Если используются CCP и CRP, то это усложняет по-
вторное использование компонентов.
42
