Чистая архитектура. Искусство разработки программного обеспечения. Роберт Мартин.
Структурное программирование.
Какие управляющие структуры используются в структурном программировании?
Что такое функциональная декомпозиция? Как функциональная декомпозиция помогает в тестировании?
Объектно-ориентированное программирование: инкапсуляция, наследование, полиморфизм. Инверсия зависимостей.
Какой механизм обеспечивает независимость слоев приложения?
Как отделить бизнес-правила от пользовательского интерфейса и базы данных?
Нарисуйте схему инверсии зависимости для примера: Функция HighLevel вызывает функцию MiddleLevel.F(). Укажите направление потока исполнения и направление зависимости.
Функциональное программирование
Какие проблемы несет использование изменяемых переменных в многопоточном окружении?
Опишите стратегию "Регистрация событий" (event sourcing). В чем достоинства и недостатки данной стратегии?
Принципы SOLID
Цели принципов SOLID
Принцип единственной ответственности (SRP). Какие проблемы возникают при нарушении принципа? Механизмы решения проблемы. Нарисовать схему шаблона "Фасад".
Принцип открытости/закрытости (OCP). Цели.
Принцип подстановки Барбары Лисков (LSP). Последствия нарушения LSP.
Принцип разделения интерфейсов (ISP). Последствия нарушения ISP.
Принцип инверсии зависимости (DIP). Нарисовать шаблон "Абстрактная фабрика"
Компоненты программного обеспечения
Принцип эквивалентности повторного использования и выпусков (REP)
Принцип согласованного изменения (CCP)
Принцип совместного повторного использования (CRP)
Сочетание компонентов
Принцип ацикличности зависимостей
Принцип устойчивых зависимостей
Принцип устойчивости абстракций
Бизнес-правила
Что такое бизнес-правила? Приведите примеры бизнес-правил.
Что такое сущности? Может ли сущность зависеть от выбора БД, пользовательского интерфейса или сторонних фреймворков?
Что такое варианты использования? Могут ли сущности знать о вариантах использования? Должен ли вариант использования знать транспортный уровень (HTTP,SQL), особенности интерфейса пользователя?
Архитектура
Что такое архитектура. Цель архитектуры программного обеспечения. Из чего складывается стоимость программного обеспечения.
Характеристики архитектуры: независимость от фреймворков, простота тестирования, независимость от пользовательского интерфейса, независимость от базы данных, независимость от внешних агентов.
Нарисуйте чистую архитектуру в виде концентрических кругов: сущности, варианты использования, адаптеры интерфейсов, фреймворки и драйверы. Опишите назначение этих элементов. Назовите правило зависимостей. Какие данные пересекают границы?
Опишите шаблон "Скромный объект" и его использование в тестировании. Что такое модель представления? Как отображаются элементы управления в модели представления?
Тестируемая архитектура. Шлюзы к базам данных. Может ли вариант использования напрямую обращаться к SQL?
Опишите шаблон "Стратегия".