Similar presentations:
Разработка программных модулей. Урок 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
programming
informatics