Проектирование и архитектура программного обеспечения
Проектирование и архитектура программного обеспечения касаются того, как программная система структурируется на компоненты и соединители, как декомпозируются обязанности и как проектные решения удовлетворяют функциональные потребности и атрибуты качества.
Definition
Проектирование программного обеспечения — это процесс определения архитектуры, компонентов, интерфейсов и других характеристик системы, а архитектура программного обеспечения — это набор структур, включающих элементы системы, их взаимосвязи и свойства как элементов, так и взаимосвязей.
Scope
Эта область охватывает архитектурные стили и шаблоны (многослойный, клиент-серверный, микросервисы, событийно-ориентированный, конвейерный); принципы проектирования, такие как модульность, сокрытие информации, связность, связанность и разделение ответственности; объектно-ориентированное и компонентно-ориентированное проектирование; шаблоны проектирования; атрибуты качества архитектуры и их компромиссы; а также нотации моделирования, такие как UML, используемые для выражения проектов.
Sub-topics
Core questions
- Как система должна быть декомпозирована на модули и компоненты?
- Какой архитектурный стиль наилучшим образом поддерживает требуемые атрибуты качества?
- Как принципы проектирования, такие как связанность и связность, определяют хорошую структуру?
- Как повторяющиеся проблемы проектирования решаются с помощью повторно используемых шаблонов?
Key theories
- Сокрытие информации и модульность
- Парнас утверждал, что модули должны быть определены таким образом, чтобы скрывать проектные решения, которые, вероятно, изменятся, за стабильными интерфейсами, чтобы изменения были локализованы; этот принцип лежит в основе модульности, инкапсуляции и низкой связанности.
- Атрибуты качества архитектуры и компромиссы
- Архитектура определяется атрибутами качества, такими как производительность, изменяемость, доступность и безопасность; поскольку они конфликтуют, архитектура по сути заключается в рассуждениях о компромиссах, руководствуясь тактиками и шаблонами.
- Шаблоны проектирования
- Повторяющиеся проблемы проектирования имеют хорошо известные, названные решения — порождающие, структурные и поведенческие шаблоны — которые отражают экспертную практику и предоставляют общий словарь для объектно-ориентированного проектирования.
Clinical relevance
Архитектурные решения труднее всего изменить впоследствии и они наиболее сильно определяют атрибуты качества системы, поэтому грамотное проектирование и архитектура снижают долгосрочные затраты на обслуживание, обеспечивают масштабируемость и эволюцию, а также формируют организацию команды.
Evidence & guidelines
Стандарт ISO/IEC/IEEE 42010 стандартизирует описание архитектуры, а область знаний SWEBOK Software Design вместе с такими справочными текстами, как «Software Architecture in Practice», предоставляют консенсусное руководство.
History
Принципы модульного проектирования были сформулированы Парнасом в начале 1970-х годов. Объектно-ориентированное проектирование и шаблоны проектирования развивались в 1980-х и 1990-х годах, архитектура программного обеспечения выделилась в отдельную дисциплину благодаря работе Шоу и Гарлана в середине 1990-х годов, а сервисно-ориентированные и микросервисные стили появились в 2000-х и 2010-х годах.
Debates
- Монолитная архитектура против микросервисной архитектуры
- Широко обсуждается вопрос о том, следует ли строить системы как единый развертываемый монолит или как множество независимо развертываемых сервисов; микросервисы предлагают независимое масштабирование и развертывание ценой сложности распределенной системы, поэтому правильный выбор зависит от масштаба и организационной структуры.
Key figures
- David Parnas
- Mary Shaw
- Len Bass
- Erich Gamma
- Grady Booch
Related topics
Seminal works
- parnas1972
- gamma1994
- bass2012
Frequently asked questions
- В чем разница между проектированием и архитектурой?
- Архитектура касается структур самого высокого уровня и решений, изменение которых наиболее затратно — основных компонентов, их взаимодействий и общесистемных атрибутов качества, — в то время как проектирование охватывает более детальную внутреннюю структуру этих компонентов; граница является скорее вопросом значимости, чем четкой линией.
- Почему шаблоны проектирования важны?
- Шаблоны фиксируют проверенные решения повторяющихся проблем проектирования и дают инженерам общий словарь, делая проекты легче для общения, осмысления и развития; они являются руководством, которое следует применять разумно, а не обязательными рецептами.