Разработка программных модулей. Урок 39

1.

Разработка
программных модулей

2.

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

3.

Шаблоны проектирования
Архитектура приложения — это набор решений о том, как модули
приложения будут общаться друг с другом и с внешним миром.
Архитектура включает в себя подходы: ограничения, правила и эвристики,
которым надо следовать при написании кода.
3

4.

Шаблоны проектирования
Эвристики — это совокупность приёмов и методов, облегчающих и
упрощающих решение задач.
Существуют следующие эвристики:
- Эвристика доступности;
- Эвристика аффекта;
- Эвристика репрезентативности;
- Эвристика знакомства;
- Эвристика дефицита.
4

5.

Шаблоны проектирования
Паттерны (шаблоны) проектирования — это способы построения программ,
которые считаются хорошим тоном для разработчиков. Их еще называют
шаблонами или образцами: чаще всего паттерн — это типовое решение для
часто встречающейся задачи на построение.
Понятие не стоит путать с паттерном в дизайне — там так называются узоры,
построенные на повторяющихся элементах или орнаментах. В разработке же
паттерн — это схема решения.
Кроме паттернов, существуют антипаттерны проектирования — это плохие
решения, неэффективные. Применять их считается дурным тоном.
5

6.

Шаблоны проектирования
Паттерны используют программисты на разных языках, в первую очередь те,
которые занимаются объектно-ориентированным программированием.
Само понятие паттерна тесно связано с ООП: этот подход позволяет разбить
структуру программы на формализованные классы и объекты. Решение
строится из них, как из кирпичиков. Такой вид разработки хорошо сочетается
с паттернами.
В широком смысле паттерны проектирования применяются во всех отраслях,
где есть списки часто встречающихся формализованных проблем. В
разработке это почти любое направление.
6

7.

Шаблоны проектирования
Паттерны проектирования помогают быстрее и эффективнее создавать код, а
не «изобретать велосипеды». Как с созданием любого продукта: лучше
воспользоваться знаниями, которые наработали другие, чем продумывать с
нуля абсолютно все.
Если разработчик может грамотно формализовать проблему с помощью ООП
и выбрать подходящий паттерн для ее решения, это может серьезно
ускорить сроки разработки. А решение будет понятным и эффективным – это
уже доказали люди, которые начали применять конкретный паттерн раньше.
Кроме того, использование паттернов еще и улучшает читаемость кода.
Другой программист, знакомый с нужным паттерном, сможет увидеть его в
коде и понять, как все реализовано. А ведь в разработке обычно
задействовано несколько специалистов – коммуникация между ними
упрощается.
7

8.

Шаблоны проектирования
Типичный паттерн — это формализованное решение какой-либо проблемы.
Оно может быть представлено как алгоритм или как схема, блоки которой
означают части программы.
У паттернов есть свои имена, есть описания, они четко предназначены для
решения той или иной проблемы. Имеется и классификация – в первую
очередь по тому, для чего нужен тот или иной шаблон.
8

9.

Шаблоны проектирования
Кроме паттернов проектирования, еще есть архитектурные паттерны. Они
работают по тому же принципу, но с важным различием. Архитектурные
паттерны – высшего уровня, они описывают структуру всего продукта. А
паттерны проектирования применяются уже на уровне конкретных объектов,
алгоритмов и частей программы.
9

10.

Шаблоны проектирования
Если упростить, архитектурный паттерн отвечает на вопрос «как будет
устроен продукт». Например, модель MVC — архитектурный паттерн.
А паттерн проектирования отвечает на вопрос «как лучше организовать
составные части продукта»: как эффективнее создавать объекты, настраивать
обмен данными между ними и их взаимодействие. Паттерны
проектирования адаптированы под конкретную задачу, не зависят от языка
программирования и не влияют на структуру продукта целиком. Они
описывают детали, а не общую архитектуру.
10

11.

Шаблоны проектирования
Еще есть идиомы — это тоже формализованные способы решения проблем,
но зависящие от языка программирования. Они реализуются на еще более
мелком уровне для решения конкретных задач – например, утечки памяти.
Приведите пример идиом?
11

12.

Шаблоны проектирования
Многоуровневый шаблон.
Разделение системы на отдельные уровни с организацией внутри них
компонентов по соответствующим критериям позволяет более слаженно
взаимодействовать отдельным разработчикам и командам. В таком подходе
уровни способствуют применению полезных практик слабого зацепления и
высокой связности.
Строго говоря, в этой модели каждый модуль должен присваиваться только
одному уровню, притом, что вышестоящие уровни могут использовать
нижестоящие. Такая структура оправдывает себя в плане обслуживаемости,
позволяя разным командам параллельно работать над разными модулями
12

13.

Шаблоны проектирования
API взаимодействует с сервисами бизнес-логики, которые, в свою
очередь, обращаются к уровню данных. При этом все они могут иметь
общий набор библиотек для повторного использования компонентов.
13

14.

Шаблоны проектирования
Шаблон «Клиент-сервер»
14

15.

Шаблоны проектирования
Шаблон «Каналы и фильтры»
Шаблон «Каналы и фильтры» (Pipes and Filters) — это архитектурный паттерн,
который организует обработку данных как последовательность шагов, где
каждый шаг (фильтр) выполняет определенную операцию, а каналы (pipes)
передают данные между ними.
Паттерн полезен, когда:
• Обработка данных состоит из нескольких независимых этапов.
• Требуется гибкость в изменении порядка или набора операций.
• Необходима параллельная обработка данных.
15

16.

Шаблоны проектирования
16

17.

Шаблоны проектирования
Архитектура каналов и фильтров применяется в самых разных приложениях,
особенно при решении задач, обеспечивающих простую одностороннюю
обработку — например, инструменты EDI (электронный обмен данными), ETL
(извлечение, преобразование и загрузка).
Пример — компиляторы: последовательно расположенные фильтры
выполняют лексический, синтаксический, семантический анализ и создание
кода.
17

18.

Шаблоны проектирования
Шаблон SOA.
В сервис-ориентированной архитектуре (SOA) независимые компоненты
реализуются в виде сервисов, что предоставляет специфическую
функциональность. Эти сервисы совмещаются в среде выполнения,
определяя поведение системы в целом. Чтобы все сработало, потребители
сервисов должны иметь возможность обнаруживать и использовать их, не
зная деталей реализации.
18

19.

Шаблоны проектирования
Построить такую архитектуру можно по-разному.
Традиционные системы SOA в основном опираются на протокол SOAP,
который работает путём обмена XML-сообщениями, а более «современные»
приложения ориентированы на использование микросервисов, которые
связываются легковесными сообщениями, передаваемыми по протоколу
вроде HTTP.
19

20.

Шаблоны проектирования
20

21.

Шаблоны проектирования
Шаблон «Издатель-подписчик»
В шаблоне «Издатель-подписчик» издатели и потребители данных
существуют независимо и являются друг для друга анонимными. В рамках
этого шаблона множество потребителей подписываются на события,
публикуемые множеством издателей. Обе стороны взаимодействуют
опосредованно через шину событий.
Поскольку все взаимодействия реализуются через шину событий, то к ней
должны быть подключены все участники. Причём для успешной работы
здесь важен правильный выбор подходящей технологии.
21

22.

Шаблоны проектирования
22

23.

Шаблоны проектирования
Шаблон «Общие данные»
В шаблоне «Общие данные» несколько компонентов обращаются к набору
данных через общее хранилище. При этом ни один из компонентов не несёт
полной ответственности за сами данные или хранилище, так как они
являются общими. Такой шаблон особенно эффективен в случаях, когда
множеству компонентов требуется доступ к большим объёмам данных.
23

24.

Шаблоны проектирования
24

25.

Шаблоны проектирования
Шаблон P2P
Одноранговые архитектурные шаблоны принадлежат к категории
симметричных шаблонов «Клиент-сервер». Симметричность в данном
контексте означает отсутствие в сети подразделения на клиентов и серверы.
В этом шаблоне одна система выступает и как клиент, и как сервер.
Каждая система, также называемая пиром, отправляет запросы другим
пирам сети и в то же время получает и обслуживает запросы от других пиров
этой сети. Такая схема сильно отличается от традиционной клиент-серверной
сети, в которой клиент должен только отправлять запрос и ожидать его
обработки сервером.
25

26.

Шаблоны проектирования
26

27.

Шаблоны проектирования
Шаблон «Брокер сервисов»
Брокерская система включает в себя три основных компонента: брокера,
сервер и клиента. Этот шаблон используется для структуризации
распределённых систем с раздельными компонентами. На определённом
уровне он является расширением клиент-серверного подхода для более
сложных сценариев.
Брокер – это компонент, отвечающий за переправку сообщений между
клиентом и сервером. Эти сообщения представляют собой запросы к
сервисам и ответы на них, а также отчёты о возникших исключениях.
27

28.

Шаблоны проектирования
28

29.

Шаблоны проектирования
Несоответствие архитектуры
Архитектурное несоответствие – это феномен, который очень часто
встречается при проектировании архитектуры, в которой предполагается, что
компонент будет использоваться способом, противоречащим его базовому
назначению. В результате возрастает сложность не только разработки
архитектуры, но и её обслуживания, что делает невозможным достижение
необходимых критериев качества.
29

30.

Задание
Какой архитектурный из приведенных вы выберите для реализации
приложения «Чат»? Ответ обоснуйте
30

31.

Домашнее задание
Выполните задание со слайда 30

32.

Спасибо за внимание!
English     Русский Правила