Общие темы. Тема 01
Post on 09-Jan-2017
108 Views
Preview:
TRANSCRIPT
Темы лекции: Архитектуры приложений.
Тренер: Игорь Шкулипа, к.т.н.
http://www.slideshare.net/IgorShkulipa 2
Общие сведения об архитектуре приложений
http://www.slideshare.net/IgorShkulipa 3
Архитектура приложения
Создание архитектуры приложения – это процесс формированияструктурированного решения, отвечающего всем техническим иоперационным требованиям и обеспечивающего оптимальные общиеатрибуты качества, такие как производительность, безопасность иуправляемость. Он включает принятие ряда решений на основанииширокого диапазона факторов. Каждое из этих решений может иметьсущественное влияние на качество, производительность, удобствообслуживания и общий успех приложения.
Архитектура программной или вычислительной системы – это структураили структуры системы, включающие программные элементы, видимыеизвне свойства этих элементов и взаимоотношения между ними.Архитектура касается внешней части интерфейсов; внутренние деталиэлементов – детали, относящиеся исключительно к внутреннейреализации – не являются архитектурными
http://www.slideshare.net/IgorShkulipa 4
Цели архитектуры
Архитектура приложения должна объединять бизнес-требования итехнические требования через понимание вариантов использования споследующим нахождением путей их реализации в ПО. Цельархитектуры – выявить требования, оказывающие влияние наструктуру приложения. Хорошая архитектура снижает бизнес-риски,связанные с созданием технического решения. Хорошая структураобладает значительной гибкостью, чтобы справляться с естественнымразвитием технологий, как в области оборудования и ПО, так ипользовательских сценариев и требований.
http://www.slideshare.net/IgorShkulipa 5
Вопросы архитектуры
• Как пользователь будет использовать приложение?
• Как приложение будет разворачиваться и обслуживаться приэксплуатации?
• Какие требования по атрибутам качества, таким как безопасность,производительность, возможность параллельной обработки,интернационализация и конфигурация, выдвигаются к приложению?
• Как спроектировать приложение, чтобы оно оставалось гибким иудобным в обслуживании в течение долгого времени?
• Основные архитектурные направления, которые могут оказыватьвлияние на приложение сейчас или после его развертывания?
http://www.slideshare.net/IgorShkulipa 6
Архитектура должна
• Раскрывать структуру системы, но скрывать детали реализации.
• Реализовывать все варианты использования и сценарии.
• По возможности отвечать всем требованиям различныхзаинтересованных сторон.
• Выполнять требования, как по функциональности, так и покачеству.
http://www.slideshare.net/IgorShkulipa 7
Принципы проектирования архитектуры
При проектировании архитектуры необходимо ответить на следующиевопросы:
• Какие части архитектуры являются фундаментальными, изменениекоторых в случае неверной реализации представляет наибольшиериски?
• Какие части архитектуры вероятнее всего подвергнутьсяизменениям, а также проектирование каких частей можноотложить?
• Основные допущения, и как они будут проверяться?
• Какие условия могут привести к реструктуризации дизайна?
Не пытайтесь создать слишком сложную архитектуру и не делайте предположений, которые не можете проверить.
http://www.slideshare.net/IgorShkulipa 8
Основные принципы проектирования архитектуры
• Создавайте, чтобы изменять. Продумайте, как со временем можетпонадобиться изменить приложение, чтобы оно отвечало вновьвозникающим требованиям и задачам, и предусмотрите необходимуюгибкость.
• Создавайте модели для анализа и сокращения рисков.Используйте средства проектирования, системы моделирования, такиекак Унифицированный язык моделирования (Unified ModelingLanguage, UML), и средства визуализации, когда необходимо выявитьтребования, принять архитектурные и проектные решения ипроанализировать их последствия. Тем не менее, не создавайтеслишком формализованную модель, она может ограничитьвозможности для выполнения итераций и адаптации дизайна.
http://www.slideshare.net/IgorShkulipa 9
Основные принципы проектирования архитектуры
• Используйте модели и визуализации как средства общения присовместной работе. Для построения хорошей архитектурыкритически важен эффективный обмен информацией о дизайне,принимаемых решениях и вносимых изменениях. Используйте модели,представления и другие способы визуализации архитектуры дляэффективного обмена информацией и связи со всемизаинтересованными сторонами, а также для обеспечения быстрогооповещение об изменениях в дизайне.
• Выявляйте ключевые инженерные решения. Используйтеинформацию, представленную в руководствах по проектированиюархитектуры приложений, чтобы понять ключевые инженерныерешения и области, в которых чаще всего возникают ошибки. В самомначале проекта уделите достаточное количество времени и вниманиядля принятия правильных решений, это обеспечит создание болеегибкого дизайна, внесение изменений в который не потребует полнойего переработки.
http://www.slideshare.net/IgorShkulipa 10
Тестирование архитектуры
При тестировании архитектуры дайте ответы на следующие вопросы:
• Какие допущения были сделаны в этой архитектуре?
• Каким явным или подразумеваемым требованиям отвечает даннаяархитектура?
• Основные риски при использовании такого архитектурногорешения?
• Каковы меры противодействия для снижения основных рисков?
• Является ли данная архитектура улучшением базовойархитектуры или одним из возможных вариантов архитектуры?
http://www.slideshare.net/IgorShkulipa 11
Разработка архитектуры
1
1
Архитектура ПО частоописывается какорганизация илиструктура системы, гдесистема представляетнабор компонентов,выполняющихопределенную функциюили набор функций.Иначе говоря, основноеназначение архитектуры –организация компонентовс целью обеспеченияопределеннойфункциональности. Такуюорганизациюфункциональности частоназывают группировкойкомпонентов по«функциональнымобластям».
http://www.slideshare.net/IgorShkulipa 12
Слои приложения
• Разделяйте функциональные области. Разделите приложение наотдельные функции с, по возможности, минимальным перекрытиемфункциональности. Основное преимущество такого подхода –независимая оптимизация функциональных возможностей. Кроме того,сбой одной из функций не приведет к сбою остальных, поскольку онимогут выполняться независимо друг от друга. Такой подход такжеупрощает понимание и проектирование приложения и облегчаетуправление сложными взаимосвязанными системами.
• Реализуйте слабое связывание слоев с помощью абстракции.Это можно реализовать, определяя интерфейсные компоненты схорошо известными входными и выходными характеристиками, такиекак фасад , которые преобразуют запросы в формат, понятныйкомпонентам слоя. Кроме того, также можно определять общийинтерфейс или совместно используемую абстракцию(противоположность зависимости), которые должны быть реализованыкомпонентами интерфейса, используя интерфейсы или абстрактныебазовые классы.
http://www.slideshare.net/IgorShkulipa 13
Слои приложения
• Явно определяйте связи между слоями. Решение, в которомкаждый слой приложения может взаимодействовать или имеетзависимости со всеми остальными слоями, является сложным дляпонимания и управления. Принимайте явные решения о зависимостяхмежду слоями и о потоках данных между ними.
• Не смешивайте разные типы компонентов на одном логическомуровне. Начинайте с идентификации функциональных областей изатем группируйте компоненты, ассоциированные с каждой из этихобластей в логические уровни. Например, слой UI не должен включатькомпоненты выполнения бизнес-процессов, в него должны входитьтолько компоненты, используемые для обработки пользовательскоговвода и запросов.
• Придерживайтесь единого формата данных в рамках слоя иликомпонента. Смешение форматов данных усложнит реализацию,расширение и обслуживание приложения. Любое преобразованиеодного формата данных в другой требует реализации кодапреобразования и влечет за собой издержки на обработку.
http://www.slideshare.net/IgorShkulipa 14
Основные принципы проектирования
• Разделение функций. Разделите приложение на отдельныекомпоненты с, по возможности, минимальным перекрытиемфункциональности. Важным фактором является предельноеуменьшение количества точек соприкосновения, что обеспечитвысокую связность (high cohesion) и слабую связанность (lowcoupling). Неверное разграничение функциональности может привестик высокой связанности и сложностям взаимодействия, даже несмотряна слабое перекрытие функциональности отдельных компонентов.
• Принцип единственности ответственности. Каждый отдельновзятый компонент или модуль должен отвечать только за одноконкретное свойство/функцию или совокупность связанных функций.
• Принцип минимального знания (также известный как ЗаконДеметера (Law of Demeter, LoD)). Компоненту или объекту не должныбыть известны внутренние детали других компонентов или объектов.
http://www.slideshare.net/IgorShkulipa 15
Основные принципы проектирования
• Не повторяйтесь (Don’t repeat yourself, DRY). Намерение должнобыть обозначено только один раз. В применении к проектированиюприложения это означает, что определенная функциональностьдолжна быть реализована только в одном компоненте и не должнадублироваться ни в одном другом компоненте.
• Минимизируйте проектирование наперед. Проектируйте толькото, что необходимо. В некоторых случаях, когда стоимость разработкиили издержки в случае неудачного дизайна очень высоки, можетпотребоваться полное предварительное проектирование итестирование. В других случаях, особенно при гибкой разработке,можно избежать масштабного проектирования наперед (big designupfront, BDUF). Если требования к приложению четко не определены,или существует вероятность изменения дизайна со временем,старайтесь не тратить много сил на проектирование раньше времени.Этот принцип называют YAGNI(«You ain’t gonna need it»).
http://www.slideshare.net/IgorShkulipa 16
Практики проектирования
• Придерживайтесь единообразия шаблонов проектирования врамках одного слоя. По возможности, в рамках одного логическогоуровня структура компонентов, выполняющих определеннуюоперацию, должна быть единообразной. Например, если для объекта,выступающего в роли шлюза к таблицам или представлениям базыданных, решено использовать шаблон Table Data Gateway (Шлюзтаблицы данных), не надо включать еще один шаблон, скажем,Repository (Хранилище), использующий другую парадигму доступа кданным и инициализации бизнес-сущностей. Однако для задач с болеешироким диапазоном требований может потребоваться применитьразные шаблоны, например, для приложения, включающегоподдержку бизнес-транзакций и составления отчетов.
• Не дублируйте функциональность в приложении. Та или инаяфункциональность должна обеспечиваться только одним компонентом,ее дублирование в любом другом месте недопустимо. Этообеспечивает связность компонентов и упрощает их оптимизацию вслучае необходимости изменения отдельной функциональнойвозможности. Дублирование функциональности в приложении можетусложнить реализацию изменений, снизить понятность приложения исоздать потенциальную возможность для несогласованностей.
http://www.slideshare.net/IgorShkulipa 17
Практики проектирования
• Предпочитайте композицию наследованию. По возможности, дляповторного использования функциональности применяйтекомпозицию, а не наследование, потому что наследованиеувеличивает зависимость между родительским и дочерними классами,ограничивая, таким образом, возможности повторного использованияпоследних. Это также будет способствовать уменьшению глубиныиерархий наследования, что упростит работу с ними.
• Применяйте определенный стиль написания кода и соглашениео присваивании имен для разработки. Поинтересуйтесь, имеет лиорганизация сформулированный стиль написания кода и соглашения оприсваивании имен. Если нет, необходимо придерживатьсяобщепринятых стандартов. В этом случае вы получите единообразнуюмодель, все участники группы смогут без труда работать с кодом,написанным не ими, т.е. код станет более простым и удобным вобслуживании.
http://www.slideshare.net/IgorShkulipa 18
Практики проектирования
• Обеспечивайте качество системы во время разработки спомощью методик автоматизированного QA. Используйте впроцессе разработки модульное тестирование и другие методикиавтоматизированного Анализа качества (Quality Analysis), такие каканализ зависимостей и статический анализ кода. Четко определяйтепоказатели поведения и производительности для компонентов иподсистем и используйте автоматизированные инструменты QA впроцессе разработки, чтобы гарантировать отсутствиенеблагоприятного воздействия локальных решений попроектированию или реализации на качество всей системы.
• Учитывайте условия эксплуатации приложения. Определитенеобходимые ИТ-инфраструктуре показатели и эксплуатационныеданные, чтобы гарантировать эффективное развертывание и работуприложения. Приступайте к проектированию компонентов и подсистемприложений, только имея ясное представление об их индивидуальныхэксплуатационных требованиях, что существенно упростит общееразвертывание и эксплуатацию. Использование автоматизированныхинструментов QA при разработке гарантированно обеспечит получениенеобходимых эксплуатационных характеристик компонентов иподсистем приложения.
http://www.slideshare.net/IgorShkulipa 19
Компоненты, модули и функции
• Компонент или объект не должен полагаться на внутренниеданные других компонентов или объектов. Каждый метод,вызываемый компонентом или методом другого объекта иликомпонента, должен располагать достаточными сведениями о том, какобрабатывать поступающие запросы и, в случае необходимости, какперенаправлять их к соответствующим подкомпонентам или другимкомпонентам. Это способствует созданию более удобных вобслуживании и адаптируемых приложений.
• Не перегружайте компонент функциональностью. Например,компонент UI не должен включать код для доступа к данным илиобеспечивать дополнительную функциональность. Перегруженныекомпоненты часто имеют множество функций и свойств, сочетаябизнес-функциональность и сквозную функциональность, такие какпротоколирование и обработка исключений. В результате получаетсяочень неустойчивый к ошибкам и сложный в обслуживании дизайн.Применение принципов исключительной ответственности и разделенияфункциональности поможет избежать этого.
http://www.slideshare.net/IgorShkulipa 20
Компоненты, модули и функции
• Разберитесь с тем, как будет осуществляться связь междукомпонентами. Это требует понимания сценариев развертывания,которые должно поддерживать создаваемое приложение. Необходимоопределить, будут ли все компоненты выполняться в рамках одногопроцесса или необходимо обеспечить поддержку связи черезфизические границы или границы процесса, вероятно, путем реализацииинтерфейсов взаимодействия на основе сообщений.
• Максимально изолируйте сквозную функциональность от бизнес-логики приложения. Сквозная функциональность – это аспектыбезопасности, обмена информацией или управляемости, такие какпротоколирование и инструментирование. Смешение кода,реализующего эти функции, с бизнес-логикой может привести ксозданию дизайна, который будет сложно расширять и обслуживать.
• Определяйте четкий контракт для компонентов. Компоненты,модули и функции должны определять контракт или спецификациюинтерфейса, четко оговаривающую их использование и поведение.Контракт должен описывать, как другие компоненты могут выполнятьдоступ к внутренней функциональности компонента, модуля илифункции, и поведение этой функциональности с точки зренияпредварительных условий, постусловий, побочных эффектов,исключений, рабочих характеристик и других факторов.
http://www.slideshare.net/IgorShkulipa 21
Определение типа приложения
• Приложения для мобильных устройств.
• Насыщенные клиентские приложения для выполненияпреимущественно на клиентских ПК.
• Насыщенные клиентские приложения для развертывания из Интернетас поддержкой насыщенных UI и мультимедийных сценариев.
• Сервисы, разработанные для обеспечения связи между слабосвязанными компонентами.
• Веб-приложения для выполнения преимущественно на сервере всценариях с постоянным подключением.
http://www.slideshare.net/IgorShkulipa 22
Другие типы приложений
• Приложения и сервисы, размещаемые в центрах обработки данных(ЦОД) и в облаке.
• Офисные бизнес-приложения (Office Business Applications, OBAs),интегрирующие технологии Microsoft Office и Microsoft Server.
• Бизнес-приложения SharePoint (SharePoint Line of Business, LOB),обеспечивающие доступ к бизнес-данным и функциональнымвозможностям через портал.
http://www.slideshare.net/IgorShkulipa 23
Выбор стратегии развертывания
Приложение может развертываться в разнообразнейших средах, каждаяиз которых будет иметь собственный набор ограничений, таких какфизическое распределение компонентов по серверам, ограничение поиспользуемым сетевым протоколам, настройки межсетевых экранов имаршрутизаторов и многое другое.
Существует несколько общих схем развертывания, которые описываютпреимущества и мотивы применения ряда распределенных инераспределенных сценариев.
При выборе стратегии необходимо найти компромисс между требованиямиприложения и соответствующими схемами развертывания,поддерживаемым оборудованием, и ограничениями, налагаемымисредой на варианты развертывания. Все эти факторы будут влиять напроектируемую архитектуру.
http://www.slideshare.net/IgorShkulipa 24
Выбор соответствующих технологий
Ключевым фактором при выборе технологий для приложения являетсятип разрабатываемого приложения, а также предпочтительныеварианты топологии развертывания приложения и архитектурныестили. Выбор технологий также определяется политикамиорганизации, ограничениями среды, квалификацией ресурсов и т.д.
Необходимо сравнить возможности выбираемых технологий стребованиями приложения, принимая во внимание все эти факторы.
http://www.slideshare.net/IgorShkulipa 25
Выбор показателей качества
2
5
Показатели качества, такие как безопасность, производительность,удобство и простота использования, помогают сфокусироватьвнимание на критически важных проблемах, которые должен решатьсоздаваемый дизайн.
При проектировании с учетом показателей качества следуетруководствоваться следующим:
• Показатели качества – это свойства системы, отделенные от еефункциональности.
• С технической точки зрения, реализованные показатели качестваотличают хорошую систему от плохой.
• Существует два типа показателей качества: измеряемые во времявыполнения и те, оценить которые можно только посредствомпроверки.
• Необходимо провести анализ и найти оптимальное соотношениемежду показателями качества.
http://www.slideshare.net/IgorShkulipa 26
Выбор показателей качества
Вопросы, на которые необходимо ответить при рассмотрении показателейкачества:
• Каковы основные показатели качества приложения? Определитеих в ходе процесса разработки.
• Каковы основные требования для реализации этих показателей?Поддаются ли они количественному определению?
• Каковы критерии приемки, которые будут свидетельствовать овыполнении требований?
http://www.slideshare.net/IgorShkulipa 27
Сквозная функциональность
Сквозная функциональность представляет ключевую область дизайна, несвязанную с конкретным функционалом приложения. Например,необходимо рассмотреть возможности реализации централизованных илиобщих решений для следующих аспектов:
• Механизм протоколирования, обеспечивающий возможностькаждому слою вести журнал в общем хранилище либо в разныххранилищах, но таким образом, чтобы результаты могли бытьсопоставлены впоследствии.
• Механизмы аутентификации и авторизации, обеспечивающиепередачу удостоверений на разные уровни для предоставлениядоступа к ресурсам.
• Инфраструктура управления исключениями, которая будетфункционировать в каждом слое и между уровнями, если исключенияраспространяются в рамках системы.
• Подход к реализации связей, используемый для обеспеченияобмена информацией между слоями.
• Общая инфраструктура кэширования, позволяющая кэшироватьданные в слое представления, бизнес-слое и слое доступа к данным.
http://www.slideshare.net/IgorShkulipa 28
Рекомендации для сквозной функциональности
• Инструментирование и протоколирование. Обеспечивайте управлениеи мониторинг всех критически важных для бизнес-логики и системысобытий. Протоколируйте достаточное количество сведений длявоссоздания событий в системе без включения конфиденциальных данных.
• Аутентификация. Определитесь с тем, как будет проходитьаутентификация пользователей и передача аутентифицированныхудостоверений между слоями.
• Авторизация. На каждом уровне и между границами доверия обеспечьтесоответствующую авторизацию с необходимой детализацией.
• Управление исключениями. Перехватывайте исключения нафункциональных, логических и физических границах и избегайтераскрытия конфиденциальных сведений конечным пользователям.
• Связь. Выберите соответствующие протоколы, сведите до минимумаколичество вызовов по сети и защитите передачу конфиденциальныхданных по сети.
• Кэширование. Определите, что должно кэшироваться и где дляулучшения производительности и сокращения времени откликаприложения.
http://www.slideshare.net/IgorShkulipa 29
Основные архитектурные стили
http://www.slideshare.net/IgorShkulipa 30
Основные архитектурные стили
Клиент/серверСистема разделяется на два приложения, где клиент выполняет запросы к серверу. Во многих случаях в роли сервера выступает база данных, а логика приложения представлена процедурами хранения.
Компонентная архитектура
Дизайн приложения разлагается на функциональные или логические компоненты с возможностью повторного использования, предоставляющие тщательно проработанные интерфейсы связи.
Дизайн на основе
предметной области
Объектно-ориентированный архитектурный стиль, ориентированный на моделирование сферы деловой активности и определяющий бизнес-объекты на основании сущностей этой сферы.
Многослойная архитектура
Функциональные области приложения разделяются на многослойные группы (уровни).
Шина сообщений
Архитектурный стиль, предписывающий использование программной системы, которая может принимать и отправлять сообщения по одному или более каналам связи, так что приложения получают возможность взаимодействовать, не располагая конкретными сведениями друг о друге.
http://www.slideshare.net/IgorShkulipa 31
Основные архитектурные стили
N-уровневая / 3-уровневая
Функциональность выделяется в отдельные сегменты, во многом аналогично многослойному стилю, но в данном случае сегменты физически располагаются на разных компьютерах.
Объектно-ориентированная
Парадигма проектирования, основанная на распределении ответственности приложения или системы между отдельными многократно используемыми и самостоятельными объектами, содержащими данные и поведение.
Сервисно-оринетрированнаяархитектура (SOA)
Описывает приложения, предоставляющие и потребляющие функциональность в виде сервисов с помощью контрактов и сообщений.
Архитектура программной системы практически никогда неограничена лишь одним архитектурным стилем, зачастую она
является сочетанием архитектурных стилей, образующих полнуюсистему.
http://www.slideshare.net/IgorShkulipa 32
Архитектура клиент/сервер
Клиент/серверная архитектура описывает распределенные системы, состоящие изотдельных клиента и сервера и соединяющей их сети. Простейшая формасистемы клиент/сервер, называемая 2-уровневой архитектурой – этосерверное приложение, к которому напрямую обращаются множество клиентов.
К разновидностям стиля клиент/сервер относятся:• Системы клиент-очередь-клиент. Этот подход позволяет клиентам
обмениваться данными с другими клиентами через очередь на сервере.Клиенты могут читать данные с и отправлять данные на сервер, которыйвыступает в роли простой очереди для хранения данных. Благодаря этомуклиенты могут распределять и синхронизировать файлы и сведения. Иногдатакую архитектуру называют пассивной очередью.
• Одноранговые (Peer-to-Peer, P2P) приложения. Созданный на базеклиент-очередь-клиент, стиль P2P позволяет клиенту и серверуобмениваться ролями с целью распределения и синхронизации файлов иданных между множеством клиентов. Эта схема расширяет стильклиент/сервер, добавляя множественные ответы на запросы, совместноиспользуемые данные, обнаружение ресурсов и устойчивость при удаленииучастников сети.
• Серверы приложений. Специализированный архитектурный стиль, прикотором приложения и сервисы размещаются и выполняются на сервере, итонкий клиент выполняет доступ к ним через браузер или специальноеустановленное на клиенте ПО. Примером является клиент, которыйработает с приложением, выполняющимся на сервере, через такую средукак Terminal Services (Службы терминалов).
http://www.slideshare.net/IgorShkulipa 33
Основные преимущества клиент/сервера
• Большая безопасность. Все данные хранятся на сервере, которыйобычно обеспечивает больший контроль безопасности, чем клиентскиекомпьютеры.
• Централизованный доступ к данным. Поскольку данные хранятсятолько на сервере, администрирование доступа к данным намногопроще, чем в любых других архитектурных стилях.
• Простота обслуживания. Роли и ответственность вычислительнойсистемы распределены между несколькими серверами, общающимисядруг с другом по сети. Благодаря этому клиент гарантированноостается неосведомленным и не подверженным влиянию событий,происходящих с сервером (ремонт, обновление либо перемещение).
http://www.slideshare.net/IgorShkulipa 34
Компонентная архитектура
Компонентная архитектура описывает подход к проектированию иразработке систем с использованием методов проектированияпрограммного обеспечения.
Основное внимание в этом случае уделяется разложению дизайна наотдельные функциональные или логические компоненты,предоставляющие четко определенные интерфейсы, содержащиеметоды, события и свойства.
В данном случае обеспечивается более высокий уровень абстракции, чемпри объектно-ориентированной разработке, и не происходитконцентрации внимания на таких вопросах, как протоколы связи илиобщее состояние.
http://www.slideshare.net/IgorShkulipa 35
Компонентная архитектура
Основной принцип компонентного стиля – применение компонентов,обладающих следующими качествами:
• Пригодность для повторного использования. Как правило, компонентыпроектируются с обеспечением возможности их повторного использованияв разных сценариях различных приложений. Однако некоторыекомпоненты создаются специально для конкретной задачи.
• Замещаемость. Компоненты могут без труда заменяться другимиподобными компонентами.
• Независимость от контекста. Компоненты проектируются для работы вразных средах и контекстах. Специальные сведения, такие как данные осостоянии, должны не включаться или извлекаться компонентом, апередаваться в него.
• Расширяемость. Компонент может расширять существующие компонентыдля обеспечения нового поведения.
• Инкапсуляция. Компоненты предоставляют интерфейсы, позволяющиевызывающей стороне использовать их функциональность, не раскрываяпри этом детали внутренних процессов либо внутренние переменные илисостояние.
• Независимость. Компоненты проектируются с минимальнымизависимостями от других компонентов. Таким образом, компоненты могутбыть развернуты в любой подходящей среде без влияния на другиекомпоненты или системы.
http://www.slideshare.net/IgorShkulipa 36
Преимущества компонентной архитектуры
• Простота развертывания. Существующие версии компонентов могутзаменяться новыми совместимыми версиями, не оказывая влияния надругие компоненты или систему в целом.
• Меньшая стоимость. Использование компонентов стороннихпроизводителей позволяет распределять затраты на разработку иобслуживание.
• Простота разработки. Для обеспечения заданной функциональностикомпоненты реализуют широко известные интерфейсы, что позволяетвести разработку без влияния на другие части системы.
• Возможность повторного использования. Применениемногократно используемых компонентов означает возможностьраспределения затрат на разработку и обслуживание междунесколькими приложениями или системами.
• Упрощение с технической точки зрения. Компоненты упрощаютсистему через использование контейнера компонентов и его сервисов.В качестве примеров сервисов, предоставляемых контейнером, можнопривести активацию компонентов, управление жизненным циклом,организацию очереди вызовов методов, обработку событий итранзакции.
http://www.slideshare.net/IgorShkulipa 37
Многослойная архитектура
Многоуровневая архитектура обеспечивает группировку связаннойфункциональности приложения в разных слоях, выстраиваемыхвертикально, поверх друг друга.
Многослойная архитектураподдерживается рядомшаблонов проектирования.Например, под названиемSeparated Presentation(Отделение представления)объединяется ряд шаблонов,разделяющих взаимодействиепользователя с UI,представление, бизнес-логикуи данные приложения, скоторыми работаетпользователь. Отделениепредставления позволяетсоздавать UI в графическихдизайнерах, в то время какразработчики пишутуправляющий код.
http://www.slideshare.net/IgorShkulipa 38
Принципы проектирования многослойной архитектуры
• Абстракция. Многослойная архитектура представляет систему как единоецелое, обеспечивая при этом достаточно деталей для понимания ролей иответственностей отдельных слоев и отношений между ними.
• Инкапсуляция. Во время проектирования нет необходимости делатькакие-либо предположения о типах данных, методах и свойствах илиреализации, поскольку все эти детали скрыты в рамках слоя.
• Четко определенные функциональные слои. Разделениефункциональности между слоями очень четкая. Верхние слои, такие какслой представления, посылают команды нижним слоям, таким как бизнес-слой и слой данных, и могут реагировать на события, возникающие в этихслоях, обеспечивая возможность передачи данных между слоями вверх ивниз.
• Высокая связность. Четко определенные границы ответственности длякаждого слоя и гарантированное включение в слой толькофункциональности, напрямую связанной с его задачами, поможетобеспечить максимальную связность в рамках слоя.
• Возможность повторного использования. Отсутствие зависимостеймежду нижними и верхними слоями обеспечивает потенциальнуювозможность их повторного использования в других сценариях.
• Слабое связывание. Для обеспечения слабого связывания между слоямисвязь между ними основывается на абстракции и событиях.
http://www.slideshare.net/IgorShkulipa 39
Преимущества многослойной архитектуры
• Абстракция. Уровни обеспечивают возможность внесения изменений наабстрактном уровне. Используемый уровень абстракции каждого слояможет быть увеличен или уменьшен.
• Изоляция. Обновления технологий могут быть изолированы в отдельныхслоях, что поможет сократить риск и минимизировать воздействие на всюсистему.
• Управляемость. Разделение основных функций помогаетидентифицировать зависимости и организовать код в секции, что повышаетуправляемость.
• Производительность. Распределение слоев по нескольким физическимуровням может улучшить масштабируемость, отказоустойчивость ипроизводительность.
• Возможность повторного использования. Роли повышают возможностьповторного использования. Например, в MVC Контроллер часто можетиспользоваться повторно с другими совместимыми Представлениями дляобеспечения характерного для роли или настроенного для пользователяпредставления одних и тех же данных и функциональности.
• Тестируемость. Улучшение тестируемости является результатом наличиястрого определенных интерфейсов слоев, а также возможностипереключения между разными реализациями интерфейсов слоев. ШаблоныSeparated Presentation позволяют создавать во время тестированияфиктивные объекты, имитирующие поведение реальных объектов, такихкак Модель, Контроллер или Представление.
http://www.slideshare.net/IgorShkulipa 40
N-уровневая / 3-уровневая архитектура
N-уровневая и 3-уровневая архитектура являются стилямиразвертывания, описывающими разделение функциональности насегменты, во многом аналогично многослойной архитектуре, но вданном случае эти сегменты могут физически размещаться наразных компьютерах, их называют уровнями.
Основными преимуществами N-уровневого/3-уровневого архитектурногостиля являются:
• Удобство поддержки. Уровни не зависят друг от друга, чтопозволяет выполнять обновления или изменения, не оказывая влиянияна приложение в целом.
• Масштабируемость. Уровни организовываются на основанииразвертывания слоев, поэтому масштабировать приложение довольнопросто.
• Гибкость. Управление и масштабирование каждого уровня можетвыполняться независимо, что обеспечивает повышение гибкости.
• Доступность. Приложения могут использовать модульнуюархитектуру, которая позволяет использовать в системе легкомасштабируемые компоненты, что повышает доступность.
http://www.slideshare.net/IgorShkulipa 41
3-уровневая архитектура
http://www.slideshare.net/IgorShkulipa 42
Некоторые архитектурные паттерны
http://www.slideshare.net/IgorShkulipa 43
MVC
Шаблон проектированияMVC разделяет работувеб-приложения на триотдельныефункциональные роли:
• модель данных(model)
• пользовательскийинтерфейс (view)
• управляющуюлогику (controller)
Таким образом, изменения,вносимые в один изкомпонентов, оказываютминимально возможноевоздействие на другиекомпоненты.
http://www.slideshare.net/IgorShkulipa 44
MVP
• Модель (model)представляет собой интерфейс,определяющий данные дляотображения или участвующие впользовательском интерфейсеиным образом
• Вид (view) - это интерфейс,который отображает данные(модель) и маршрутизируетпользовательские команды (илисобытия) Presenter-у, чтобы тотдействовал над этими данными.
• Presenter действует надмоделью и видом. Он извлекаетданные из хранилища (модели), иформатирует их для отображенияв Виде (view). Так же реализуетобработку событий вида.
http://www.slideshare.net/IgorShkulipa 46
MVVM
• Модель (Model), так же, как вклассическом паттерне MVC, Модельпредставляет собой фундаментальныеданные, необходимые для работыприложения (классы, структуры).
• Вид/Представление (View) также, как в классическом паттерне MVC,Вид — это графический интерфейс, тоесть окно, кнопки и.т.п.
• Модель вида (ViewModel, чтоозначает «Model of View») является содной стороны абстракцией Вида, а сдругой предоставляет обертку данныхиз Модели, которые подлежатсвязыванию. То есть она содержитМодель, которая преобразована кВиду, а так же содержит в себекоманды, которыми можетпользоваться Вид, чтобы влиять наМодель.
top related