Кратко по контрольным вопросам:
1. **Архитектура ПО** — высокоуровневое описание структуры системы: из каких компонентов она состоит, как они взаимодействуют и как организована обработка данных.
2. **Задачи архитектурного проектирования** — упростить разработку и сопровождение, уменьшить число ошибок, повысить расширяемость, облегчить распределение работы между разработчиками.
3. **Компонент** — самостоятельная часть программной системы, выполняющая определённый набор функций (например, модуль управления пользователями).
4. **Ответственность компонента** — чётко определённая область функциональности, за которую отвечает данный компонент и только он.
5. **Интерфейсы взаимодействия** — нужны, чтобы один компонент мог использовать функции другого, не зная деталей его внутренней реализации.
6. **Почему минимизируют зависимости** — чем слабее связаны модули, тем проще изменять и сопровождать систему, не затрагивая остальные части.
7. **Принцип разделения ответственности** — каждый компонент должен отвечать только за одну группу логически связанных функций.
8. **Основные архитектурные стили** — монолитная, клиент-серверная, слоистая, микросервисная.
9. **Особенности слоистой архитектуры** — система делится на слои (представление, бизнес-логика, данные), каждый взаимодействует только с соседним; понятная структура, но избыточность прохождения запроса через все слои и риск размывания границ слоёв.
10. **Монолитная vs микросервисная** — в монолитной все компоненты входят в одно приложение (просто разрабатывать, сложно масштабировать); в микросервисной — множество независимых сервисов, разрабатываемых отдельно (гибко, но избыточно для небольших проектов).
11. **Почему слоистая клиент-серверная для небольших систем** — она проста для понимания, хорошо масштабируется и соответствует современным подходам к разработке.
12. **Влияние архитектуры на разработку и сопровождение** — правильная архитектура упрощает добавление новых функций, снижает количество ошибок, облегчает распределение задач между разработчиками и делает систему легче поддерживать и модифицировать в будущем.