- •Введение
- •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. Антишаблоны проектирования
сом Object B компонента Package B. В случае если изначально зависи-
мость была бы реализована через интерфейс (т.е. Interface A находился в Package B), то для инверсии зависимостей достаточно было бы пере-
нести интерфейс Interface A из пакета Package B в пакет Package A.
3.4.2. Принцип устойчивых зависимостей
Принцип устойчивых зависимостей предполагает, что все зависи-
мости должны быть направлены от менее устойчивых программных сущностей к более устойчивым. Формулировка принципа говорит об очевидном факте того, что ИС будет наиболее устойчивой (а, следова-
тельно, и надёжной) в случае, когда зависимости отдельных компонен-
тов будут направлены на наименее часто меняющиеся структуры данных.
Изменение таких структур данных, очевидно, ведёт к изменению большого числа зависящих от них программных сущностей и, как след-
ствие, к росту вероятности появления ошибки.
Количество зависимостей, а, следовательно, и степень неустойчи-
вости (I) можно рассчитать как отношение числа исходящих зависимо-
стей (Fan-out) к общему числу зависимостей компонента (Fan-in + Fanout). Таким образом, для каждого компонента степень устойчивости может быть рассчитана по формуле: I = Fan-out / (Fan-int + Fan-out).
3.4.3. Принцип устойчивости абстракций
Принцип открытости/закрытости предполагает, что расширение функционала ИС может производиться в основном за счёт механики наследования в объектно-ориентированных языках программирования.
В связи с этим очевидной становится следующая зависимость: чем большее число функций и параметров можно переопределить у про-
граммной сущности, тем проще вносить в неё изменения. Другими сло47
вами, чем выше степень абстракции программной сущности, тем проще её изменять.
Принцип устойчивости абстракций может характеризоваться по-
средством коэффициента абстрактности A, рассчитываемого как отно-
шение числа абстрактных программных сущностей (абстрактных клас-
сов Na и интерфейсов Ni) к общему числу программных сущностей (аб-
страктных классов Na, интерфейсов Ni и конкретных классов Nc): A = (Na + Ni) / (Na + + Ni + Nc).
3.4.4. Графическая интерпретация принципов SDP и SAP
Метрики неустойчивости I и степени абстракции A можно исполь-
зовать в совокупности для оценки разрабатываемой системы. Обе мет-
рики колеблются в диапазоне [0; 1] и могут быть изображены на графи-
ке, представленном на рис. 10.
Рисунок 10 – График устойчивости ИС В случае если у компонентов ИС высокая степень абстракции и на
них направлено большое число зависимостей (т.е. они обладают высо-
кой устойчивостью), то такую систему можно считать стабильной, так как изменение её компонентов посредством реализаций абстрактных
48
классов согласно принципу OCP не приведёт к значительным правкам во всей ИС.
Таким образом, можно выделить «главную последовательность»,
соединив точки (0; 1) и (1; 0) прямой линией. Можно считать, что ком-
поненты, располагающиеся вблизи главной последовательности, соот-
ветствуют «золотой середине»: либо редко изменяются, либо их изме-
нения не затрагивают иных компонентов системы (см. рис. 11.).
Точка (1; 1) и её окрестности описывают высокоабстрактные ком-
поненты, на которые не направлены зависимости. Абстрактные компо-
ненты сами по себе не выполняют никаких функций, а лишь задают общие правила обработки данных. Таким образом, если на компоненты не направлено зависимостей, то в ИС не существует реализаций абст-
рактных программных сущностей, а следовательно, эти программные сущности не используются в ИС. Зону в окрестностях точки (1; 1)
Р.Мартин называет зоной «бесполезности».
Рисунок 11 – Главная последовательность Зона в окрестностях точки (0; 0) характеризует компоненты, от ко-
торых зависит большое число других компонентов, при этом не содер-
жащие абстрактных программных сущностей. Без нарушения принципа
OCP такие программные сущности изменять затруднительно, а боль-
49
