АРХИТЕКТУРА ПРОГРАММНОГО...

26
АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ Д. Мигинский

Upload: others

Post on 17-Mar-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

АРХИТЕКТУРА

ПРОГРАММНОГО

ОБЕСПЕЧЕНИЯ

Д. Мигинский

Page 2: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Понятие архитектуры

– Архитектура , это совокупность решений,

принимаемых системным архитектором.

– Какие решения принимает архитектор?

– Существенные с точки зрения архитектуры.

– Какие решения существенны?

– Это решает архитектор.

http://www.bredemeyer.com

Page 3: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Определение

Архитектура программной системы –

ее организационная структура, включающая

модули, их внешние характеристики, а также

отношения между модулями.

Обычно в архитектуру не включается

внутреннее устройство отдельных модулей.

Page 4: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Бритва Оккама

Оригинальная формулировка:

Не порождайте сущностей сверх

необходимого.

Применительно к программной архитектуре:

Из всех архитектурных решений, которые

удовлетворяют требованиям лучше то,

которое проще в понимании.

Формулировка для запоминания:

Принцип KISS (Keep It Simple, Stupid)

Page 5: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Разделение ответственностиРазделение ответственностей (Separation of

Concerns, SoC) – процесс разделения

(программной) системы на составные части,

как можно меньше дублирующие

функциональность друг другу.

Это основной принцип (программной)

инженерии, сформулирован Э. Дейкстрой.

Формулировка для запоминания:

Принцип DRY (Don’t Repeat Yourself)

Page 6: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Разделение абстракций

Абстракция + инкапсуляция + модульность =

SoC

При правильном разделении ответственностей

получившиеся составные части (модули)

представляют собой абстракции, скрывающие

внутреннее устройство и предоставляющие

сравнительно простой внешний интерфейс

Page 7: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Уровни абстракции

Нередко разделение абстракций представляет

«слоеный пирог», тогда говорят об уровнях

абстракции.

Application

Presentation

Session

Transport

Network

Data link

Physical

JVM

OS Kernel

Firmware

Hardware

Page 8: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Виды ответственностей (concerns)

Ответственности 1-го класса: бизнес-логика

приложения, следует непосредственно из

функциональных требований

Ответственности 2-го класса (сквозная

функциональность, cross-cutting concerns):

функциональность, не относящаяся к бизнес-

логике, проистекающая из нефункциональных

требований

Page 9: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Нефункциональные требования

• Платформа («железо», ОС, языки,

библиотеки)

• Производительность (performance)

• Масштабируемость (scalability)

• Распределение функциональности по

физическим узлам

• Простота поддержки, расширения,

повторного использования модулей

(maintainability, extensibility, reusability)

Page 10: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Cross-cutting concerns

• Инициализация

• Управление жизненным циклом объектов

• Персистентность

• Журналирование

• Транзакции

• Многопоточность и синхронизация

• Безопасность

• Надежность (24/7 и т.д.)

• …

Page 11: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Представление архитектурыОбщие принципы и соглашения об организации

системы:

• Парадигма

• Применение архитектурных шаблонов

Архитектурные представления (4+1 модель):

• Logical View (классы и пакеты)

• Process View (процессы и синхронизация)

• Physical View (компоненты и узлы)

• Development View (организация кода)

• Scenario View (варианты использования)

Page 12: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Архитектурные шаблоны

Архитектурный шаблон представляет собой

типичное архитектурное решение для

определенного класса задач.

Как правило, архитектурный шаблон определяет

общий вид архитектуры системы или

существенной ее части.

Page 13: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Клиент-серверЗадача: обеспечить коммуникацию в распределенной среде между

клиентами

Решение:

Клиенты взаимодействуют с единой

сущностью – сервером. Между собой

клиенты взаимодействовать не могут.

Преимущества:

Сравнительная простота реализации

и конфигурации

Недостатки:

Сервер – потенциальное

узкое место

Клиент

Сервер

Клиент

Page 14: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Одноранговая архитектура (P2P)Задача: см. «клиент-сервер»

Решение:

Клиенты непосредственно

взаимодействуют друг с другом

Преимущества:

Нет явных узких мест

Недостатки:

• Сложность реализации и конфигурации

• Потенциальные проблемы видимости и маршрутизации

Клиент

Клиент

Клиент

Клиент

Page 15: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Замечания по терминологии

В общем случае:

Сервер – сущность, предоставляющая

функциональность

Клиент – сущность, использующая

функциональность

Термины могут применяться безотносительно

распределенных приложений

Page 16: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Многоуровневая архитектура (N-tier

Architecture)

Вариант архитектуры «клиент-сервер»,

где функциональность делится более чем

на два уровня.

Каждый уровень является клиентом

по отношению к нижележащему.

Распространенный вариант: 3-уровневая

архитектура

Преимущества:

• распределение нагрузки между уровнями

• хорошая масштабируемость

Замечание: для эффективного применения

уровни (tiers) должны соотноситься с уровнями

абстракции (layers)

Presentation

Logic

Data

Page 17: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

3-уровневая архитектура

Data Tier/Layer – отвечает за представление

данных и персистентность (соответствует

набору entity в аналитической модели)

Logic Tier/Layer – реализует основную часть

функциональности системы, отвечает также за

целостность данных (~ controls)

Presentation Tier/Layer – реализует интерфейс

пользователя (~ boundaries)

Page 18: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Модель-представление-управление

(MVC)

ModelControllerView

<<чтение/запись>>

<<пользовательский ввод>>

<<сообщения об изменении>>

Задача: разделение бизнес-логики и интерфейса

пользователя в соответствии с SoC

Как правило, речи не идет о распределенной системе

Page 19: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Переход от MVC к 3-tier

View Controller Model

<<subscribe>>

<<subscribe>>

Шаг 1: применение стереотипа subscribe

Page 20: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Переход от MVC к 3-tier

View Controller Model

<<subscribe>>

<<subscribe>>

Шаг 1: применение стереотипа subscribe

Page 21: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Переход от MVC к 3-tier

Шаг 2: расщепление контроллера

View UI Controller

Logic Controller Model

<<subscribe>>

<<subscribe>>

Page 22: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Переход от MVC к 3-tier

Шаг 3: инкапсуляция модели

View UI Controller Logic Controller

Model

<<subscribe>>

Model Facade

<<subscribe>><<subscribe>>

Model

Controller

View

Page 23: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Hollywood Principle

Don’t call us, we’ll call you

Page 24: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Цикл обработки сообщений WinAPI

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{ MSG msg; while(GetMessage(&msg, NULL, 0, 0) > 0) {

TranslateMessage(&msg); DispatchMessage(&msg);

} return msg.wParam;

}

Page 25: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Инверсия управления (Inversion of

Control, IoC, Hollywood Principle)

Задача: использовать альтернативный механизм запуска

и/или исполнения приложения (вычислительную модель)

Решение: фреймворк реализует “main” с

соответствующей вычислительной моделью,

пользовательский код явной точки входа не содержит

Основные области применения:

• Управление жизненным циклом объектов и связей

(Dependency Injection)

• Интерфейсы пользователя

• Альтернативные вычислительные модели (автоматы,

продукции, потоки данных и т.д.)

Page 26: АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯccfit.nsu.ru/~shadow/OOAD/pps/06-SoftwareArchitecture.pdf · • Process View (процессы и синхронизация)

Задача:

Обеспечить взаимодействие

между модулями без жесткой

их привязки друг к другу

Решение:

Модули взаимодействуют в

терминах посылки сообщений и реакции на них.

Как правило, сообщения асинхронны.

Недостатки:

шина сообщений может быть узким местом

Применение:

• Интерфейс пользователя

• Взаимодействие приложений

• Распределенные вычисления (MPI)

Событийно-ориентированная

архитектураEven

t Bu

s

Module1

Module2

Module3