47
Темы лекции: Архитектуры приложений. Тренер: Игорь Шкулипа, к.т.н.

Общие темы. Тема 01

Embed Size (px)

Citation preview

Page 1: Общие темы. Тема 01

Темы лекции: Архитектуры приложений.

Тренер: Игорь Шкулипа, к.т.н.

Page 2: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 2

Общие сведения об архитектуре приложений

Page 3: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 3

Архитектура приложения

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

Архитектура программной или вычислительной системы – это структураили структуры системы, включающие программные элементы, видимыеизвне свойства этих элементов и взаимоотношения между ними.Архитектура касается внешней части интерфейсов; внутренние деталиэлементов – детали, относящиеся исключительно к внутреннейреализации – не являются архитектурными

Page 4: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 4

Цели архитектуры

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

Page 5: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 5

Вопросы архитектуры

• Как пользователь будет использовать приложение?

• Как приложение будет разворачиваться и обслуживаться приэксплуатации?

• Какие требования по атрибутам качества, таким как безопасность,производительность, возможность параллельной обработки,интернационализация и конфигурация, выдвигаются к приложению?

• Как спроектировать приложение, чтобы оно оставалось гибким иудобным в обслуживании в течение долгого времени?

• Основные архитектурные направления, которые могут оказыватьвлияние на приложение сейчас или после его развертывания?

Page 6: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 6

Архитектура должна

• Раскрывать структуру системы, но скрывать детали реализации.

• Реализовывать все варианты использования и сценарии.

• По возможности отвечать всем требованиям различныхзаинтересованных сторон.

• Выполнять требования, как по функциональности, так и покачеству.

Page 7: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 7

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

При проектировании архитектуры необходимо ответить на следующиевопросы:

• Какие части архитектуры являются фундаментальными, изменениекоторых в случае неверной реализации представляет наибольшиериски?

• Какие части архитектуры вероятнее всего подвергнутьсяизменениям, а также проектирование каких частей можноотложить?

• Основные допущения, и как они будут проверяться?

• Какие условия могут привести к реструктуризации дизайна?

Не пытайтесь создать слишком сложную архитектуру и не делайте предположений, которые не можете проверить.

Page 8: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 8

Основные принципы проектирования архитектуры

• Создавайте, чтобы изменять. Продумайте, как со временем можетпонадобиться изменить приложение, чтобы оно отвечало вновьвозникающим требованиям и задачам, и предусмотрите необходимуюгибкость.

• Создавайте модели для анализа и сокращения рисков.Используйте средства проектирования, системы моделирования, такиекак Унифицированный язык моделирования (Unified ModelingLanguage, UML), и средства визуализации, когда необходимо выявитьтребования, принять архитектурные и проектные решения ипроанализировать их последствия. Тем не менее, не создавайтеслишком формализованную модель, она может ограничитьвозможности для выполнения итераций и адаптации дизайна.

Page 9: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 9

Основные принципы проектирования архитектуры

• Используйте модели и визуализации как средства общения присовместной работе. Для построения хорошей архитектурыкритически важен эффективный обмен информацией о дизайне,принимаемых решениях и вносимых изменениях. Используйте модели,представления и другие способы визуализации архитектуры дляэффективного обмена информацией и связи со всемизаинтересованными сторонами, а также для обеспечения быстрогооповещение об изменениях в дизайне.

• Выявляйте ключевые инженерные решения. Используйтеинформацию, представленную в руководствах по проектированиюархитектуры приложений, чтобы понять ключевые инженерныерешения и области, в которых чаще всего возникают ошибки. В самомначале проекта уделите достаточное количество времени и вниманиядля принятия правильных решений, это обеспечит создание болеегибкого дизайна, внесение изменений в который не потребует полнойего переработки.

Page 10: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 10

Тестирование архитектуры

При тестировании архитектуры дайте ответы на следующие вопросы:

• Какие допущения были сделаны в этой архитектуре?

• Каким явным или подразумеваемым требованиям отвечает даннаяархитектура?

• Основные риски при использовании такого архитектурногорешения?

• Каковы меры противодействия для снижения основных рисков?

• Является ли данная архитектура улучшением базовойархитектуры или одним из возможных вариантов архитектуры?

Page 11: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 11

Разработка архитектуры

1

1

Архитектура ПО частоописывается какорганизация илиструктура системы, гдесистема представляетнабор компонентов,выполняющихопределенную функциюили набор функций.Иначе говоря, основноеназначение архитектуры –организация компонентовс целью обеспеченияопределеннойфункциональности. Такуюорганизациюфункциональности частоназывают группировкойкомпонентов по«функциональнымобластям».

Page 12: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 12

Слои приложения

• Разделяйте функциональные области. Разделите приложение наотдельные функции с, по возможности, минимальным перекрытиемфункциональности. Основное преимущество такого подхода –независимая оптимизация функциональных возможностей. Кроме того,сбой одной из функций не приведет к сбою остальных, поскольку онимогут выполняться независимо друг от друга. Такой подход такжеупрощает понимание и проектирование приложения и облегчаетуправление сложными взаимосвязанными системами.

• Реализуйте слабое связывание слоев с помощью абстракции.Это можно реализовать, определяя интерфейсные компоненты схорошо известными входными и выходными характеристиками, такиекак фасад , которые преобразуют запросы в формат, понятныйкомпонентам слоя. Кроме того, также можно определять общийинтерфейс или совместно используемую абстракцию(противоположность зависимости), которые должны быть реализованыкомпонентами интерфейса, используя интерфейсы или абстрактныебазовые классы.

Page 13: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 13

Слои приложения

• Явно определяйте связи между слоями. Решение, в которомкаждый слой приложения может взаимодействовать или имеетзависимости со всеми остальными слоями, является сложным дляпонимания и управления. Принимайте явные решения о зависимостяхмежду слоями и о потоках данных между ними.

• Не смешивайте разные типы компонентов на одном логическомуровне. Начинайте с идентификации функциональных областей изатем группируйте компоненты, ассоциированные с каждой из этихобластей в логические уровни. Например, слой UI не должен включатькомпоненты выполнения бизнес-процессов, в него должны входитьтолько компоненты, используемые для обработки пользовательскоговвода и запросов.

• Придерживайтесь единого формата данных в рамках слоя иликомпонента. Смешение форматов данных усложнит реализацию,расширение и обслуживание приложения. Любое преобразованиеодного формата данных в другой требует реализации кодапреобразования и влечет за собой издержки на обработку.

Page 14: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 14

Основные принципы проектирования

• Разделение функций. Разделите приложение на отдельныекомпоненты с, по возможности, минимальным перекрытиемфункциональности. Важным фактором является предельноеуменьшение количества точек соприкосновения, что обеспечитвысокую связность (high cohesion) и слабую связанность (lowcoupling). Неверное разграничение функциональности может привестик высокой связанности и сложностям взаимодействия, даже несмотряна слабое перекрытие функциональности отдельных компонентов.

• Принцип единственности ответственности. Каждый отдельновзятый компонент или модуль должен отвечать только за одноконкретное свойство/функцию или совокупность связанных функций.

• Принцип минимального знания (также известный как ЗаконДеметера (Law of Demeter, LoD)). Компоненту или объекту не должныбыть известны внутренние детали других компонентов или объектов.

Page 15: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 15

Основные принципы проектирования

• Не повторяйтесь (Don’t repeat yourself, DRY). Намерение должнобыть обозначено только один раз. В применении к проектированиюприложения это означает, что определенная функциональностьдолжна быть реализована только в одном компоненте и не должнадублироваться ни в одном другом компоненте.

• Минимизируйте проектирование наперед. Проектируйте толькото, что необходимо. В некоторых случаях, когда стоимость разработкиили издержки в случае неудачного дизайна очень высоки, можетпотребоваться полное предварительное проектирование итестирование. В других случаях, особенно при гибкой разработке,можно избежать масштабного проектирования наперед (big designupfront, BDUF). Если требования к приложению четко не определены,или существует вероятность изменения дизайна со временем,старайтесь не тратить много сил на проектирование раньше времени.Этот принцип называют YAGNI(«You ain’t gonna need it»).

Page 16: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 16

Практики проектирования

• Придерживайтесь единообразия шаблонов проектирования врамках одного слоя. По возможности, в рамках одного логическогоуровня структура компонентов, выполняющих определеннуюоперацию, должна быть единообразной. Например, если для объекта,выступающего в роли шлюза к таблицам или представлениям базыданных, решено использовать шаблон Table Data Gateway (Шлюзтаблицы данных), не надо включать еще один шаблон, скажем,Repository (Хранилище), использующий другую парадигму доступа кданным и инициализации бизнес-сущностей. Однако для задач с болеешироким диапазоном требований может потребоваться применитьразные шаблоны, например, для приложения, включающегоподдержку бизнес-транзакций и составления отчетов.

• Не дублируйте функциональность в приложении. Та или инаяфункциональность должна обеспечиваться только одним компонентом,ее дублирование в любом другом месте недопустимо. Этообеспечивает связность компонентов и упрощает их оптимизацию вслучае необходимости изменения отдельной функциональнойвозможности. Дублирование функциональности в приложении можетусложнить реализацию изменений, снизить понятность приложения исоздать потенциальную возможность для несогласованностей.

Page 17: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 17

Практики проектирования

• Предпочитайте композицию наследованию. По возможности, дляповторного использования функциональности применяйтекомпозицию, а не наследование, потому что наследованиеувеличивает зависимость между родительским и дочерними классами,ограничивая, таким образом, возможности повторного использованияпоследних. Это также будет способствовать уменьшению глубиныиерархий наследования, что упростит работу с ними.

• Применяйте определенный стиль написания кода и соглашениео присваивании имен для разработки. Поинтересуйтесь, имеет лиорганизация сформулированный стиль написания кода и соглашения оприсваивании имен. Если нет, необходимо придерживатьсяобщепринятых стандартов. В этом случае вы получите единообразнуюмодель, все участники группы смогут без труда работать с кодом,написанным не ими, т.е. код станет более простым и удобным вобслуживании.

Page 18: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 18

Практики проектирования

• Обеспечивайте качество системы во время разработки спомощью методик автоматизированного QA. Используйте впроцессе разработки модульное тестирование и другие методикиавтоматизированного Анализа качества (Quality Analysis), такие каканализ зависимостей и статический анализ кода. Четко определяйтепоказатели поведения и производительности для компонентов иподсистем и используйте автоматизированные инструменты QA впроцессе разработки, чтобы гарантировать отсутствиенеблагоприятного воздействия локальных решений попроектированию или реализации на качество всей системы.

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

Page 19: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 19

Компоненты, модули и функции

• Компонент или объект не должен полагаться на внутренниеданные других компонентов или объектов. Каждый метод,вызываемый компонентом или методом другого объекта иликомпонента, должен располагать достаточными сведениями о том, какобрабатывать поступающие запросы и, в случае необходимости, какперенаправлять их к соответствующим подкомпонентам или другимкомпонентам. Это способствует созданию более удобных вобслуживании и адаптируемых приложений.

• Не перегружайте компонент функциональностью. Например,компонент UI не должен включать код для доступа к данным илиобеспечивать дополнительную функциональность. Перегруженныекомпоненты часто имеют множество функций и свойств, сочетаябизнес-функциональность и сквозную функциональность, такие какпротоколирование и обработка исключений. В результате получаетсяочень неустойчивый к ошибкам и сложный в обслуживании дизайн.Применение принципов исключительной ответственности и разделенияфункциональности поможет избежать этого.

Page 20: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 20

Компоненты, модули и функции

• Разберитесь с тем, как будет осуществляться связь междукомпонентами. Это требует понимания сценариев развертывания,которые должно поддерживать создаваемое приложение. Необходимоопределить, будут ли все компоненты выполняться в рамках одногопроцесса или необходимо обеспечить поддержку связи черезфизические границы или границы процесса, вероятно, путем реализацииинтерфейсов взаимодействия на основе сообщений.

• Максимально изолируйте сквозную функциональность от бизнес-логики приложения. Сквозная функциональность – это аспектыбезопасности, обмена информацией или управляемости, такие какпротоколирование и инструментирование. Смешение кода,реализующего эти функции, с бизнес-логикой может привести ксозданию дизайна, который будет сложно расширять и обслуживать.

• Определяйте четкий контракт для компонентов. Компоненты,модули и функции должны определять контракт или спецификациюинтерфейса, четко оговаривающую их использование и поведение.Контракт должен описывать, как другие компоненты могут выполнятьдоступ к внутренней функциональности компонента, модуля илифункции, и поведение этой функциональности с точки зренияпредварительных условий, постусловий, побочных эффектов,исключений, рабочих характеристик и других факторов.

Page 21: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 21

Определение типа приложения

• Приложения для мобильных устройств.

• Насыщенные клиентские приложения для выполненияпреимущественно на клиентских ПК.

• Насыщенные клиентские приложения для развертывания из Интернетас поддержкой насыщенных UI и мультимедийных сценариев.

• Сервисы, разработанные для обеспечения связи между слабосвязанными компонентами.

• Веб-приложения для выполнения преимущественно на сервере всценариях с постоянным подключением.

Page 22: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 22

Другие типы приложений

• Приложения и сервисы, размещаемые в центрах обработки данных(ЦОД) и в облаке.

• Офисные бизнес-приложения (Office Business Applications, OBAs),интегрирующие технологии Microsoft Office и Microsoft Server.

• Бизнес-приложения SharePoint (SharePoint Line of Business, LOB),обеспечивающие доступ к бизнес-данным и функциональнымвозможностям через портал.

Page 23: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 23

Выбор стратегии развертывания

Приложение может развертываться в разнообразнейших средах, каждаяиз которых будет иметь собственный набор ограничений, таких какфизическое распределение компонентов по серверам, ограничение поиспользуемым сетевым протоколам, настройки межсетевых экранов имаршрутизаторов и многое другое.

Существует несколько общих схем развертывания, которые описываютпреимущества и мотивы применения ряда распределенных инераспределенных сценариев.

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

Page 24: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 24

Выбор соответствующих технологий

Ключевым фактором при выборе технологий для приложения являетсятип разрабатываемого приложения, а также предпочтительныеварианты топологии развертывания приложения и архитектурныестили. Выбор технологий также определяется политикамиорганизации, ограничениями среды, квалификацией ресурсов и т.д.

Необходимо сравнить возможности выбираемых технологий стребованиями приложения, принимая во внимание все эти факторы.

Page 25: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 25

Выбор показателей качества

2

5

Показатели качества, такие как безопасность, производительность,удобство и простота использования, помогают сфокусироватьвнимание на критически важных проблемах, которые должен решатьсоздаваемый дизайн.

При проектировании с учетом показателей качества следуетруководствоваться следующим:

• Показатели качества – это свойства системы, отделенные от еефункциональности.

• С технической точки зрения, реализованные показатели качестваотличают хорошую систему от плохой.

• Существует два типа показателей качества: измеряемые во времявыполнения и те, оценить которые можно только посредствомпроверки.

• Необходимо провести анализ и найти оптимальное соотношениемежду показателями качества.

Page 26: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 26

Выбор показателей качества

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

• Каковы основные показатели качества приложения? Определитеих в ходе процесса разработки.

• Каковы основные требования для реализации этих показателей?Поддаются ли они количественному определению?

• Каковы критерии приемки, которые будут свидетельствовать овыполнении требований?

Page 27: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 27

Сквозная функциональность

Сквозная функциональность представляет ключевую область дизайна, несвязанную с конкретным функционалом приложения. Например,необходимо рассмотреть возможности реализации централизованных илиобщих решений для следующих аспектов:

• Механизм протоколирования, обеспечивающий возможностькаждому слою вести журнал в общем хранилище либо в разныххранилищах, но таким образом, чтобы результаты могли бытьсопоставлены впоследствии.

• Механизмы аутентификации и авторизации, обеспечивающиепередачу удостоверений на разные уровни для предоставлениядоступа к ресурсам.

• Инфраструктура управления исключениями, которая будетфункционировать в каждом слое и между уровнями, если исключенияраспространяются в рамках системы.

• Подход к реализации связей, используемый для обеспеченияобмена информацией между слоями.

• Общая инфраструктура кэширования, позволяющая кэшироватьданные в слое представления, бизнес-слое и слое доступа к данным.

Page 28: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 28

Рекомендации для сквозной функциональности

• Инструментирование и протоколирование. Обеспечивайте управлениеи мониторинг всех критически важных для бизнес-логики и системысобытий. Протоколируйте достаточное количество сведений длявоссоздания событий в системе без включения конфиденциальных данных.

• Аутентификация. Определитесь с тем, как будет проходитьаутентификация пользователей и передача аутентифицированныхудостоверений между слоями.

• Авторизация. На каждом уровне и между границами доверия обеспечьтесоответствующую авторизацию с необходимой детализацией.

• Управление исключениями. Перехватывайте исключения нафункциональных, логических и физических границах и избегайтераскрытия конфиденциальных сведений конечным пользователям.

• Связь. Выберите соответствующие протоколы, сведите до минимумаколичество вызовов по сети и защитите передачу конфиденциальныхданных по сети.

• Кэширование. Определите, что должно кэшироваться и где дляулучшения производительности и сокращения времени откликаприложения.

Page 29: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 29

Основные архитектурные стили

Page 30: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 30

Основные архитектурные стили

Клиент/серверСистема разделяется на два приложения, где клиент выполняет запросы к серверу. Во многих случаях в роли сервера выступает база данных, а логика приложения представлена процедурами хранения.

Компонентная архитектура

Дизайн приложения разлагается на функциональные или логические компоненты с возможностью повторного использования, предоставляющие тщательно проработанные интерфейсы связи.

Дизайн на основе

предметной области

Объектно-ориентированный архитектурный стиль, ориентированный на моделирование сферы деловой активности и определяющий бизнес-объекты на основании сущностей этой сферы.

Многослойная архитектура

Функциональные области приложения разделяются на многослойные группы (уровни).

Шина сообщений

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

Page 31: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 31

Основные архитектурные стили

N-уровневая / 3-уровневая

Функциональность выделяется в отдельные сегменты, во многом аналогично многослойному стилю, но в данном случае сегменты физически располагаются на разных компьютерах.

Объектно-ориентированная

Парадигма проектирования, основанная на распределении ответственности приложения или системы между отдельными многократно используемыми и самостоятельными объектами, содержащими данные и поведение.

Сервисно-оринетрированнаяархитектура (SOA)

Описывает приложения, предоставляющие и потребляющие функциональность в виде сервисов с помощью контрактов и сообщений.

Архитектура программной системы практически никогда неограничена лишь одним архитектурным стилем, зачастую она

является сочетанием архитектурных стилей, образующих полнуюсистему.

Page 32: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 32

Архитектура клиент/сервер

Клиент/серверная архитектура описывает распределенные системы, состоящие изотдельных клиента и сервера и соединяющей их сети. Простейшая формасистемы клиент/сервер, называемая 2-уровневой архитектурой – этосерверное приложение, к которому напрямую обращаются множество клиентов.

К разновидностям стиля клиент/сервер относятся:• Системы клиент-очередь-клиент. Этот подход позволяет клиентам

обмениваться данными с другими клиентами через очередь на сервере.Клиенты могут читать данные с и отправлять данные на сервер, которыйвыступает в роли простой очереди для хранения данных. Благодаря этомуклиенты могут распределять и синхронизировать файлы и сведения. Иногдатакую архитектуру называют пассивной очередью.

• Одноранговые (Peer-to-Peer, P2P) приложения. Созданный на базеклиент-очередь-клиент, стиль P2P позволяет клиенту и серверуобмениваться ролями с целью распределения и синхронизации файлов иданных между множеством клиентов. Эта схема расширяет стильклиент/сервер, добавляя множественные ответы на запросы, совместноиспользуемые данные, обнаружение ресурсов и устойчивость при удаленииучастников сети.

• Серверы приложений. Специализированный архитектурный стиль, прикотором приложения и сервисы размещаются и выполняются на сервере, итонкий клиент выполняет доступ к ним через браузер или специальноеустановленное на клиенте ПО. Примером является клиент, которыйработает с приложением, выполняющимся на сервере, через такую средукак Terminal Services (Службы терминалов).

Page 33: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 33

Основные преимущества клиент/сервера

• Большая безопасность. Все данные хранятся на сервере, которыйобычно обеспечивает больший контроль безопасности, чем клиентскиекомпьютеры.

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

• Простота обслуживания. Роли и ответственность вычислительнойсистемы распределены между несколькими серверами, общающимисядруг с другом по сети. Благодаря этому клиент гарантированноостается неосведомленным и не подверженным влиянию событий,происходящих с сервером (ремонт, обновление либо перемещение).

Page 34: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 34

Компонентная архитектура

Компонентная архитектура описывает подход к проектированию иразработке систем с использованием методов проектированияпрограммного обеспечения.

Основное внимание в этом случае уделяется разложению дизайна наотдельные функциональные или логические компоненты,предоставляющие четко определенные интерфейсы, содержащиеметоды, события и свойства.

В данном случае обеспечивается более высокий уровень абстракции, чемпри объектно-ориентированной разработке, и не происходитконцентрации внимания на таких вопросах, как протоколы связи илиобщее состояние.

Page 35: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 35

Компонентная архитектура

Основной принцип компонентного стиля – применение компонентов,обладающих следующими качествами:

• Пригодность для повторного использования. Как правило, компонентыпроектируются с обеспечением возможности их повторного использованияв разных сценариях различных приложений. Однако некоторыекомпоненты создаются специально для конкретной задачи.

• Замещаемость. Компоненты могут без труда заменяться другимиподобными компонентами.

• Независимость от контекста. Компоненты проектируются для работы вразных средах и контекстах. Специальные сведения, такие как данные осостоянии, должны не включаться или извлекаться компонентом, апередаваться в него.

• Расширяемость. Компонент может расширять существующие компонентыдля обеспечения нового поведения.

• Инкапсуляция. Компоненты предоставляют интерфейсы, позволяющиевызывающей стороне использовать их функциональность, не раскрываяпри этом детали внутренних процессов либо внутренние переменные илисостояние.

• Независимость. Компоненты проектируются с минимальнымизависимостями от других компонентов. Таким образом, компоненты могутбыть развернуты в любой подходящей среде без влияния на другиекомпоненты или системы.

Page 36: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 36

Преимущества компонентной архитектуры

• Простота развертывания. Существующие версии компонентов могутзаменяться новыми совместимыми версиями, не оказывая влияния надругие компоненты или систему в целом.

• Меньшая стоимость. Использование компонентов стороннихпроизводителей позволяет распределять затраты на разработку иобслуживание.

• Простота разработки. Для обеспечения заданной функциональностикомпоненты реализуют широко известные интерфейсы, что позволяетвести разработку без влияния на другие части системы.

• Возможность повторного использования. Применениемногократно используемых компонентов означает возможностьраспределения затрат на разработку и обслуживание междунесколькими приложениями или системами.

• Упрощение с технической точки зрения. Компоненты упрощаютсистему через использование контейнера компонентов и его сервисов.В качестве примеров сервисов, предоставляемых контейнером, можнопривести активацию компонентов, управление жизненным циклом,организацию очереди вызовов методов, обработку событий итранзакции.

Page 37: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 37

Многослойная архитектура

Многоуровневая архитектура обеспечивает группировку связаннойфункциональности приложения в разных слоях, выстраиваемыхвертикально, поверх друг друга.

Многослойная архитектураподдерживается рядомшаблонов проектирования.Например, под названиемSeparated Presentation(Отделение представления)объединяется ряд шаблонов,разделяющих взаимодействиепользователя с UI,представление, бизнес-логикуи данные приложения, скоторыми работаетпользователь. Отделениепредставления позволяетсоздавать UI в графическихдизайнерах, в то время какразработчики пишутуправляющий код.

Page 38: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 38

Принципы проектирования многослойной архитектуры

• Абстракция. Многослойная архитектура представляет систему как единоецелое, обеспечивая при этом достаточно деталей для понимания ролей иответственностей отдельных слоев и отношений между ними.

• Инкапсуляция. Во время проектирования нет необходимости делатькакие-либо предположения о типах данных, методах и свойствах илиреализации, поскольку все эти детали скрыты в рамках слоя.

• Четко определенные функциональные слои. Разделениефункциональности между слоями очень четкая. Верхние слои, такие какслой представления, посылают команды нижним слоям, таким как бизнес-слой и слой данных, и могут реагировать на события, возникающие в этихслоях, обеспечивая возможность передачи данных между слоями вверх ивниз.

• Высокая связность. Четко определенные границы ответственности длякаждого слоя и гарантированное включение в слой толькофункциональности, напрямую связанной с его задачами, поможетобеспечить максимальную связность в рамках слоя.

• Возможность повторного использования. Отсутствие зависимостеймежду нижними и верхними слоями обеспечивает потенциальнуювозможность их повторного использования в других сценариях.

• Слабое связывание. Для обеспечения слабого связывания между слоямисвязь между ними основывается на абстракции и событиях.

Page 39: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 39

Преимущества многослойной архитектуры

• Абстракция. Уровни обеспечивают возможность внесения изменений наабстрактном уровне. Используемый уровень абстракции каждого слояможет быть увеличен или уменьшен.

• Изоляция. Обновления технологий могут быть изолированы в отдельныхслоях, что поможет сократить риск и минимизировать воздействие на всюсистему.

• Управляемость. Разделение основных функций помогаетидентифицировать зависимости и организовать код в секции, что повышаетуправляемость.

• Производительность. Распределение слоев по нескольким физическимуровням может улучшить масштабируемость, отказоустойчивость ипроизводительность.

• Возможность повторного использования. Роли повышают возможностьповторного использования. Например, в MVC Контроллер часто можетиспользоваться повторно с другими совместимыми Представлениями дляобеспечения характерного для роли или настроенного для пользователяпредставления одних и тех же данных и функциональности.

• Тестируемость. Улучшение тестируемости является результатом наличиястрого определенных интерфейсов слоев, а также возможностипереключения между разными реализациями интерфейсов слоев. ШаблоныSeparated Presentation позволяют создавать во время тестированияфиктивные объекты, имитирующие поведение реальных объектов, такихкак Модель, Контроллер или Представление.

Page 40: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 40

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

N-уровневая и 3-уровневая архитектура являются стилямиразвертывания, описывающими разделение функциональности насегменты, во многом аналогично многослойной архитектуре, но вданном случае эти сегменты могут физически размещаться наразных компьютерах, их называют уровнями.

Основными преимуществами N-уровневого/3-уровневого архитектурногостиля являются:

• Удобство поддержки. Уровни не зависят друг от друга, чтопозволяет выполнять обновления или изменения, не оказывая влиянияна приложение в целом.

• Масштабируемость. Уровни организовываются на основанииразвертывания слоев, поэтому масштабировать приложение довольнопросто.

• Гибкость. Управление и масштабирование каждого уровня можетвыполняться независимо, что обеспечивает повышение гибкости.

• Доступность. Приложения могут использовать модульнуюархитектуру, которая позволяет использовать в системе легкомасштабируемые компоненты, что повышает доступность.

Page 41: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 41

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

Page 42: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 42

Некоторые архитектурные паттерны

Page 43: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 43

MVC

Шаблон проектированияMVC разделяет работувеб-приложения на триотдельныефункциональные роли:

• модель данных(model)

• пользовательскийинтерфейс (view)

• управляющуюлогику (controller)

Таким образом, изменения,вносимые в один изкомпонентов, оказываютминимально возможноевоздействие на другиекомпоненты.

Page 44: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 44

MVP

• Модель (model)представляет собой интерфейс,определяющий данные дляотображения или участвующие впользовательском интерфейсеиным образом

• Вид (view) - это интерфейс,который отображает данные(модель) и маршрутизируетпользовательские команды (илисобытия) Presenter-у, чтобы тотдействовал над этими данными.

• Presenter действует надмоделью и видом. Он извлекаетданные из хранилища (модели), иформатирует их для отображенияв Виде (view). Так же реализуетобработку событий вида.

Page 45: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 45

MVC vs MVP

Page 46: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 46

MVVM

• Модель (Model), так же, как вклассическом паттерне MVC, Модельпредставляет собой фундаментальныеданные, необходимые для работыприложения (классы, структуры).

• Вид/Представление (View) также, как в классическом паттерне MVC,Вид — это графический интерфейс, тоесть окно, кнопки и.т.п.

• Модель вида (ViewModel, чтоозначает «Model of View») является содной стороны абстракцией Вида, а сдругой предоставляет обертку данныхиз Модели, которые подлежатсвязыванию. То есть она содержитМодель, которая преобразована кВиду, а так же содержит в себекоманды, которыми можетпользоваться Вид, чтобы влиять наМодель.

Page 47: Общие темы. Тема 01

http://www.slideshare.net/IgorShkulipa 47

MVVM