На данном шаге вы согласовали требования и спроектировали примерную архитектуру. Теперь необходимо углубиться в каждый из компонентов и описать как бы вы реализовывали тот или иной компонент.
Для мобильной разработки обычно это список из следующих компонентов:
- Api Data Source. Этот компонент будет отвечать за коммуникацию между вашим приложением и сервером.
- Local Data Source/Persistence. Для многих мобильных приложений необходима реализация локального персистентного хранилища данных.
- Repository - компонент являющийся посредником между вашими Api Data Source и Local Data Source, и вызывающий методы Local Data Source для кэширования например.
- UseCase - бизнес-логика для конкретного экрана. Например нужно отсортировать элементы или сделать какие-то расчеты перед тем как отобразить их на экране.
- ViewModel, Fragment, RecyclerView - сущности на уровне Presentation-слоя.
- DI - компонент отвечающий за Dependency Injection
Еще могут быть
- Image Loader
- Coordinator
- App Module
- Push Notification Service
Количество компонентов и их детализация зависит от конкретной задачи и количества времени, которое отведено на задачу. Так как времени немного, то самое главное уметь расставить приоритеты и рассказать/нарисовать значимые для решения задачи компоненты и не тратить время на второстепенные (если про них отдельно не спросил интервьюер).
Имея список компонентов (в реальном интервью он у вас на схеме перед глазами) вам необходимо пройтись по каждому и рассказать плюсы минусы альтернативных решений и почему вы выбрали именно это.
Например: вам нужно спроектировать приложение прогноза погоды. Для взаимодействия с сервером можно выбрать REST Api и для Android-приложения использовать библиотеку Retrofit + OkHttp, или можно использовать GraphQL и библиотеку Apollo для мобильного Android-клиента.
И тут вы должны пояснить интервьюеру что мы будем тут использовать Rest Api и связку Retrofit+OkHttp потому что:
REST API — самый популярный сегодня стандарт взаимодействия приложений, поддерживающий CRUD-операции и обмен сообщениями без сохранения состояния. Каждое сообщение самодостаточное и содержит всю информацию, необходимую для его обработки. Сервер не хранит результаты предыдущих сессий с клиентскими приложениями. Его достаточно просто реализовать.
Из минусов такой подход менее эффективен для мобильных платформ так как каждый запрос требует отдельного соединения, и поэтому если нужно очень часто обмениваться данными можно выбрать что-то более подходящее. А еще так как Rest API полагается на HTTP, то из-за HTTP есть еще недостатки такие как: низкая производительность операций сериализации и десериализации данных, передача бинарных данных требует дополнительного кодирования, например, через Base64. Но так как нам не нужно передавать огромное количество данных и не нужно поддерживать изменения погоды в реальном времени, то для приложения прогноза погоды будет достаточно Rest API и Retrofit + OkHttp.
Далее аналогично вы можете пройтись по Local Data Source, расскажете что это за компонент такой для чего он нужен. Можно рассказать об инструментах и библиотеках, например в Android-разработке можно использовать Realm или Room, но Realm является Non-sql решением, а под капотом Room'a реляционная база данных SQLite, а еще оно поддерживает Full Text Search и индексы.
Степень детализации может варьироваться в зависимости от вопросов интервьюера и задачи, но самое главное не просто описать компоненты, но и рассказать о плюсах и минусах тех или иных подходов. Именно умение оценить текущую задачу и подобрать оптимальное решение, зная минусы и плюсы разных подходов и определяет ваш уровень: мидл, сеньор и так далее.
Таким образом, шаг за шагом вы проходите каждый компонент и не забудьте рассказать о presentation-слое какой паттерн вы используете (MVP/MVVM/Viper etc) и почему.