Какие принципы проектирования кроме SOLID существуют
Что проверяют
Знаете ли вы принципы шире SOLID и видите ли, как они проявляются в Android-коде: в слоях приложения, в Compose, в модулях. Следом обычно просят показать принцип на примере из своего проекта или спрашивают, как вы делите приложение на слои.
Как отвечать
Перечислите общие принципы с примером под Android:
- DRY: одна точка правды для знания. Форматирование цены в одном месте, а не в каждом адаптере и экране;
- KISS: простое решение, пока задача не требует сложного. Для экрана из двух полей не нужен отдельный модуль с тремя слоями;
- YAGNI: не заводить абстракцию над Room «на случай смены базы», которой не будет;
- Separation of Concerns: официальный гайд по архитектуре делит приложение на UI-слой, необязательный domain-слой и data-слой. ViewModel готовит состояние, репозиторий решает, откуда брать данные;
- Single Source of Truth: у каждого типа данных один владелец, например база Room, а сеть только обновляет её;
- Unidirectional Data Flow: состояние идёт вниз из ViewModel в UI как
StateFlow, события идут вверх. На этом строится Compose; - композиция вместо наследования: в Kotlin классы по умолчанию
final, а делегирование черезbyпозволяет собирать поведение без иерархий; - закон Деметры: экран не лезет в
viewModel.repository.api, а получает готовое состояние.
MVVM и MVI при этом не принципы, а архитектурные паттерны, которые эти принципы реализуют. Хорошо, если скажете это прямо.
Где спотыкаются
Называют SRP как принцип «кроме SOLID». Это буква S из того же SOLID, и интервьюер сразу это заметит.
Строят BaseActivity или BaseFragment, куда со временем сваливаются аналитика, диалоги, обработка ошибок и навигация. Это нарушение и композиции, и SRP одновременно.
Выносят всё похожее в модуль :core:common ради DRY. Через год от него зависят все фичи, любая правка пересобирает проект целиком, а модули перестают быть независимыми.