- •Введение
- •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. Антишаблоны проектирования
Рисунок 4 – Диаграмма классов, соответствующая принципу ISP
Если снова представить, что этот интерфейс реализован на языке со строгим контролем типов (например, Java, C#, C++ или Delphi), ис-
ходный код User1 будет зависеть от U1OPS и op1, но не от OPS. То есть изменения в OPS, которые не касаются User1, не потребуют повторной компиляции и развёртывания User1. Меньшее число взаимосвязанных изменений, очевидно, приводит к уменьшению вероятности допущения ошибки, вызванной таким изменением.
3.2.5. Принцип инверсии зависимостей
Принцип гласит, что зависимости должны быть направлены от ме-
нее абстрактных программных сущностей к более абстрактным, а не наоборот.
Пусть имеется архитектор, работающий над системой S. Он поже-
лал включить в систему некоторый фреймворк F. Если авторы F связа-
ли фреймворк с поддержкой конкретной базы данных D, то создаётся зависимость S от D (S зависит от F, который зависит от D). Если D
включает функции, которые не используются фреймворком F и соот-
ветственно не используются системой S, то изменения в этих функциях внутри D могут вынудить повторно развернуть F и затем повторно раз-
36
