Чистая архитектура экрана 🤩
Архитектура — это набор правил и подходов, которые определяют, как строить приложения. Хорошая архитектура позволяет бизнесу сократить расходы на разработку, поддержку и исправление продукта.
Разделение на слои
Чистая архитектура подразумевает разбивку приложения на слои, каждый из которых отвечает за свою функциональность. Это подход способствует соблюдению принципов SOLID, четко определяет зоны ответственности и уменьшает стоимость изменений.
Структура слоёв в Android-приложении
В контексте Android-приложений распространённая архитектура основывается на трёх слоях:
Аналогия с автомобилем 🛞
Для лучшего понимания, рассмотрим пример с автомобилем:
- Presentation — руль, педали и приборная панель, которые позволяют водителю взаимодействовать с автомобилем.
- Domain — двигатель, трансмиссия, коробка передач и колёса, которые обеспечивают движение и функциональность автомобиля.
- Data — системы подачи воздуха и топлива, необходимые для работы двигателя.
Взаимозависимость слоёв
В Android-архитектуре:
- Presentation слой зависит от Domain слоя, так как пользовательский интерфейс должен вызывать бизнес-логику для выполнения действий.
- Data слой также зависит от Domain слоя, предоставляя ему доступ к данным и внешним системам.
Наиболее важным слоем является Domain, поскольку его изменение приведёт к изменению функциональности приложения. Поэтому доменный слой должен быть независим от других слоёв.
Принцип инверсии зависимостей (D из SOLID)
Для реализации такого подхода используется принцип инверсии зависимостей (Dependency Inversion Principle). Это позволяет нам снижать связность между компонентами, что, упрощает тестирование и поддержку кода.
Таким образом, соблюдение чистой архитектуры и принципа разделения на слои в процессе разработки Android-приложений обеспечивает гибкость, масштабируемость и лёгкость в обслуживании.
На скрине приложил базу, которая основана на всей информации из поста👨💻
🚀 Пост Guru Android: @kishmyak
Архитектура — это набор правил и подходов, которые определяют, как строить приложения. Хорошая архитектура позволяет бизнесу сократить расходы на разработку, поддержку и исправление продукта.
Разделение на слои
Чистая архитектура подразумевает разбивку приложения на слои, каждый из которых отвечает за свою функциональность. Это подход способствует соблюдению принципов SOLID, четко определяет зоны ответственности и уменьшает стоимость изменений.
Структура слоёв в Android-приложении
В контексте Android-приложений распространённая архитектура основывается на трёх слоях:
1. Presentation (Представление): отвечает за пользовательский интерфейс и взаимодействие с пользователем.
2. Domain (Доменная логика): управляет бизнес-логикой и функциональностью системы.
3. Data (Данные): обеспечивает доступ к внешним системам и хранение данных.
Аналогия с автомобилем 🛞
Для лучшего понимания, рассмотрим пример с автомобилем:
- Presentation — руль, педали и приборная панель, которые позволяют водителю взаимодействовать с автомобилем.
- Domain — двигатель, трансмиссия, коробка передач и колёса, которые обеспечивают движение и функциональность автомобиля.
- Data — системы подачи воздуха и топлива, необходимые для работы двигателя.
Взаимозависимость слоёв
В Android-архитектуре:
- Presentation слой зависит от Domain слоя, так как пользовательский интерфейс должен вызывать бизнес-логику для выполнения действий.
- Data слой также зависит от Domain слоя, предоставляя ему доступ к данным и внешним системам.
Наиболее важным слоем является Domain, поскольку его изменение приведёт к изменению функциональности приложения. Поэтому доменный слой должен быть независим от других слоёв.
Принцип инверсии зависимостей (D из SOLID)
Для реализации такого подхода используется принцип инверсии зависимостей (Dependency Inversion Principle). Это позволяет нам снижать связность между компонентами, что, упрощает тестирование и поддержку кода.
Таким образом, соблюдение чистой архитектуры и принципа разделения на слои в процессе разработки Android-приложений обеспечивает гибкость, масштабируемость и лёгкость в обслуживании.
На скрине приложил базу, которая основана на всей информации из поста
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #kotlin #sealed #class
🤔 Middle Android-разработчик (Kotlin) в компанию Ютека
Техническое собеседование. Осень 2024. 200к+. Опыт в резюме 3 года 3 месяца. В конце был большой блок лайвкодинга.
💬 Вопросы:
- Чем Kotlin выигрывает у Java в контексте Android-разработки?
- Что такое sealed-классы и для чего они применяются?
- Как ту же логику организовать через LiveData и в чём отличие от Flow?
- При использовании Flow, какой Dispatcher вы бы выбрали для работы с UI и для фоновых задач?
- Какими способами можно запустить корутину в Kotlin?
👉 Все вопросы из этого собеседования (11)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Middle Android-разработчик (Kotlin) в компанию Ютека
Техническое собеседование. Осень 2024. 200к+. Опыт в резюме 3 года 3 месяца. В конце был большой блок лайвкодинга.
💬 Вопросы:
- Чем Kotlin выигрывает у Java в контексте Android-разработки?
- Что такое sealed-классы и для чего они применяются?
- Как ту же логику организовать через LiveData и в чём отличие от Flow?
- При использовании Flow, какой Dispatcher вы бы выбрали для работы с UI и для фоновых задач?
- Какими способами можно запустить корутину в Kotlin?
👉 Все вопросы из этого собеседования (11)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
❤1
#Собес #git_status
🤔 Что делает команда git status?
💬 Кратко:
Команда
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что делает команда git status?
💬 Кратко:
Команда
git status показывает текущее состояние репозитория. Она отображает информацию о файлах, которые были изменены, добавлены в индекс или остаются незамеченными. Это помогает понять, какие шаги нужно выполнить дальше.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1
#tool #графы
📚 Терялся в собственном коде?
Встречай Gitvizz, инструмент, который мгновенно превращает кодовую базу в интерактивные графы, чтобы наглядно увидеть, как всё связано
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Терялся в собственном коде?
Встречай Gitvizz, инструмент, который мгновенно превращает кодовую базу в интерактивные графы, чтобы наглядно увидеть, как всё связано
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #flow #state #shared
🤔 Чем SharedFlow отличается от StateFlow с точки зрения поведения и буферизации?
💬 Кратко:
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Чем SharedFlow отличается от StateFlow с точки зрения поведения и буферизации?
💬 Кратко:
StateFlow хранит только последнее значение и гарантирует его получение новыми подписчиками. SharedFlow может буферизировать несколько значений и не имеет обязательного начального состояния.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍1
Threads | Потоки в Kotlin & Java
Заметил, что эта тема вызывает сложности на работе и на собеседованиях как у начинающих, так и у опытных разработчиков. Также увидел закономерность, что эту тему приходится объяснять на личных консультациях каждому ученику.
Записал видео-лекцию "Полный гайд на потоки Kotlin/Java для собеседования", где подробно рассказываю о всем, чтобы у тебя сформировалось понимание этой темы:
1. Как работают в связке процессор + ОС + JVM
2. Что такое JMM
3. Проблемы потоков и как их решить на практике
4. Для чего в android-разработке используются потоки
🚀 Пост Guru Android: @kishmyak
Заметил, что эта тема вызывает сложности на работе и на собеседованиях как у начинающих, так и у опытных разработчиков. Также увидел закономерность, что эту тему приходится объяснять на личных консультациях каждому ученику.
Записал видео-лекцию "Полный гайд на потоки Kotlin/Java для собеседования", где подробно рассказываю о всем, чтобы у тебя сформировалось понимание этой темы:
1. Как работают в связке процессор + ОС + JVM
2. Что такое JMM
3. Проблемы потоков и как их решить на практике
4. Для чего в android-разработке используются потоки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
#Собес #kotlin #class #dispatcher
🤔 Middle+ Android разработчик в компанию Сбер
Техническое собеседование. Лето 2024. Вилка: 300к+. Опыт в резюме: 3+ года. Проект: СберЗвук.
💬 Вопросы:
- Почему в проекте были только UI-тесты? Как покрывали бизнес-логику?
- Как вы тестировали UI-компоненты на Compose? Какие фреймворки применяли?
- Как избежать deadlock/livelock при работе с блокировками?
- Когда synchronized недостаточно для предотвращения гонки потоков?
- Какие примитивы синхронизации (synchronized, Atomic, семафоры) вы использовали?
👉 Все вопросы из этого собеседования (17)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Middle+ Android разработчик в компанию Сбер
Техническое собеседование. Лето 2024. Вилка: 300к+. Опыт в резюме: 3+ года. Проект: СберЗвук.
💬 Вопросы:
- Почему в проекте были только UI-тесты? Как покрывали бизнес-логику?
- Как вы тестировали UI-компоненты на Compose? Какие фреймворки применяли?
- Как избежать deadlock/livelock при работе с блокировками?
- Когда synchronized недостаточно для предотвращения гонки потоков?
- Какие примитивы синхронизации (synchronized, Atomic, семафоры) вы использовали?
👉 Все вопросы из этого собеседования (17)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #git_clone
🤔 Что делает Git-клон?
💬 Кратко:
Команда
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что делает Git-клон?
💬 Кратко:
Команда
git clone создаёт копию существующего репозитория, включая всю историю изменений, файлы и ветки. Это используется, чтобы начать работу с проектом, который уже находится в удалённом репозитории.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#tool #графы
📚 Терялся в собственном коде?
Встречай Gitvizz, инструмент, который мгновенно превращает кодовую базу в интерактивные графы, чтобы наглядно увидеть, как всё связано
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Терялся в собственном коде?
Встречай Gitvizz, инструмент, который мгновенно превращает кодовую базу в интерактивные графы, чтобы наглядно увидеть, как всё связано
Перейти к материалу
👉 База вопросов 👉 Новости
Forwarded from YeaHub
[Версия 1.3.0] - Обновление платформы
Мы продолжаем развивать YeaHub, чтобы сделать обучение ещё удобнее, эффективнее и интереснее. В этом обновлении — важные и давно ожидаемые улучшения 👇
🔹 Навыки и ключевые слова из вакансий HH
Мы запустили сервис, который помогает прокачать резюме с помощью популярных навыков и ключевых слов, встречающихся в вакансиях. Это поможет вам выше ранжироваться в поиске среди кандидатов и увеличит конверсию откликов.
https://yeahub.ru/hh-analytics?page=1&mode=skills&specialization=11
🔹 Исправления и улучшения
Мы учли вашу обратную связь: исправили баги, улучшили интерфейс и сделали работу с платформой ещё комфортнее 🧠
🔥 Скоро
1. Сервис Лайвкодинга с реальными задачами с собеседований
👉 Обучайтесь, общайтесь, растите вместе с https://yeahub.ru
#release #news #update #yeahub
Мы продолжаем развивать YeaHub, чтобы сделать обучение ещё удобнее, эффективнее и интереснее. В этом обновлении — важные и давно ожидаемые улучшения 👇
🔹 Навыки и ключевые слова из вакансий HH
Мы запустили сервис, который помогает прокачать резюме с помощью популярных навыков и ключевых слов, встречающихся в вакансиях. Это поможет вам выше ранжироваться в поиске среди кандидатов и увеличит конверсию откликов.
https://yeahub.ru/hh-analytics?page=1&mode=skills&specialization=11
🔹 Исправления и улучшения
Мы учли вашу обратную связь: исправили баги, улучшили интерфейс и сделали работу с платформой ещё комфортнее 🧠
1. Сервис Лайвкодинга с реальными задачами с собеседований
👉 Обучайтесь, общайтесь, растите вместе с https://yeahub.ru
#release #news #update #yeahub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1
#Собес #ci-cd #bitrise #automation
🤔 Как вы автоматизировали CI/CD в Bitrise? Какие шаги включал пайплайн?
💬 Кратко:
Типичные шаги:
- Сборка (Gradle).
- Тесты (Unit, UI).
- Подписание APK.
- Деploy в Firebase App Distribution.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как вы автоматизировали CI/CD в Bitrise? Какие шаги включал пайплайн?
💬 Кратко:
Типичные шаги:
- Сборка (Gradle).
- Тесты (Unit, UI).
- Подписание APK.
- Деploy в Firebase App Distribution.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1
Что отличает хорошего инженера от плохого? 👨💻
⚙ Хороший инженер использует технологию как инструмент для решения задачи, здесь очень уместна аналогия на человека который работает руками. Он забивает гвоздь молотком, а не отверткой, потому что он знает, что молотком это будет сделать быстрее.
⚖ Хороший инженер решает задачи бизнеса, поэтому находит баланс между качеством и скоростью разработки, а также использует нужные инструменты и проектирует архитектуру.
Для плохого инженера добавить новую технологию, потому что она “хайповая“ - норма. Или подстелить соломку везде и опоздать с дедлайном на месяц - тоже.
Почему важно использовать подходящие инструменты и находить баланс? Потому что так ты сможешь сэкономить свое время, а также быть более ценным → твоя команда сделает больше → бизнесу будет выгодно больше инвестировать в твою команду → ты получишь больше денег, PROFIT
А как понять какую технологию использовать и насколько проработать архитектуру? Здесь нужно опираться на свой опыт или опыт коллег, развивать свою насмотренность, тогда ты будешь понимать где находятся повышенные риски и знать, как их обойти.
🚀 Пост Guru Android: @kishmyak
Для плохого инженера добавить новую технологию, потому что она “хайповая“ - норма. Или подстелить соломку везде и опоздать с дедлайном на месяц - тоже.
Почему важно использовать подходящие инструменты и находить баланс? Потому что так ты сможешь сэкономить свое время, а также быть более ценным → твоя команда сделает больше → бизнесу будет выгодно больше инвестировать в твою команду → ты получишь больше денег, PROFIT
А как понять какую технологию использовать и насколько проработать архитектуру? Здесь нужно опираться на свой опыт или опыт коллег, развивать свою насмотренность, тогда ты будешь понимать где находятся повышенные риски и знать, как их обойти.
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #kotlin #sealed #class
🤔 Middle Android-разработчик (Kotlin) в компанию Ютека
Техническое собеседование. Осень 2024. 200к+. Опыт в резюме 3 года 3 месяца. В конце был большой блок лайвкодинга.
💬 Вопросы:
- Чем Kotlin выигрывает у Java в контексте Android-разработки?
- Что такое sealed-классы и для чего они применяются?
- Как ту же логику организовать через LiveData и в чём отличие от Flow?
- При использовании Flow, какой Dispatcher вы бы выбрали для работы с UI и для фоновых задач?
- Какими способами можно запустить корутину в Kotlin?
👉 Все вопросы из этого собеседования (11)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Middle Android-разработчик (Kotlin) в компанию Ютека
Техническое собеседование. Осень 2024. 200к+. Опыт в резюме 3 года 3 месяца. В конце был большой блок лайвкодинга.
💬 Вопросы:
- Чем Kotlin выигрывает у Java в контексте Android-разработки?
- Что такое sealed-классы и для чего они применяются?
- Как ту же логику организовать через LiveData и в чём отличие от Flow?
- При использовании Flow, какой Dispatcher вы бы выбрали для работы с UI и для фоновых задач?
- Какими способами можно запустить корутину в Kotlin?
👉 Все вопросы из этого собеседования (11)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
❤1
#Собес #horizontal_scaling #docker_swarm #kubernetes
🤔 Как масштабировать Docker контейнеры горизонтально?
💬 Кратко:
Для горизонтального масштабирования Docker контейнеров можно использовать Docker Swarm или Kubernetes. В Docker Swarm вы создаете кластер и используете команду
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как масштабировать Docker контейнеры горизонтально?
💬 Кратко:
Для горизонтального масштабирования Docker контейнеров можно использовать Docker Swarm или Kubernetes. В Docker Swarm вы создаете кластер и используете команду
docker service scale, чтобы масштабировать количество реплик для сервиса. Например, команда docker service scale myservice=5 увеличит количество реплик сервиса myservice до 5.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#repository #клоны
📚 Clone Wars
Репо для тех, кто любит учиться на реальных примерах. Тут собрано более сотни опенсорсных клонов популярных сервисов: от Airbnb до YouTube
Каждый проект снабжен ссылками на исходный код, демками, описанием стека и количеством звезд на GitHub. А у некоторых даже есть туторы по созданию
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Clone Wars
Репо для тех, кто любит учиться на реальных примерах. Тут собрано более сотни опенсорсных клонов популярных сервисов: от Airbnb до YouTube
Каждый проект снабжен ссылками на исходный код, демками, описанием стека и количеством звезд на GitHub. А у некоторых даже есть туторы по созданию
Перейти к материалу
👉 База вопросов 👉 Новости
❤1
#Собес #enum #class #sealed_class
🤔 Чем sealed-классы отличаются от enum-классов, и как у них работают конструкторы?
💬 Кратко:
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Чем sealed-классы отличаются от enum-классов, и как у них работают конструкторы?
💬 Кратко:
enum class задаёт фиксированный набор однотипных констант без полей состояния, тогда как sealed class позволяет иметь произвольные подклассы с параметризованными конструкторами и собственной логикой. У enum конструктор ограничен перечислением констант, а у sealed каждый подкласс может иметь свой конструктор и свойства.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
В конце 2025 года поиск работы у многих превратился в квест. Просто выложить резюме на hh уже не работает.
Проблемы начинаются с приглашений на скрининги, конверсией скринингов в собесы и так далее.
Для полноты картины я провожу анонимное исследование среди подписчиков:
— сколько сейчас в среднем ищут работу,
— на каком этапе чаще всего «отлетают» (отклики, скрининг, технички, финалы, сб),
— что сильнее всего тормозит.
📝 Заполнить форму — 1–2 минуты: https://forms.gle/8sSz4o4LFe2bp3DS7
На основе ответов я соберу аналитику по сложности рынка
— сделаю гайд по получению собесов для 2026 года
— разберу варианты резюме
— прокачаю подготовку к техническому собеседованию
Результаты выложу в канале, а тем, кто оставит контакт, отправлю первым
🚀 Пост Guru Android: @kishmyak
Проблемы начинаются с приглашений на скрининги, конверсией скринингов в собесы и так далее.
Для полноты картины я провожу анонимное исследование среди подписчиков:
— сколько сейчас в среднем ищут работу,
— на каком этапе чаще всего «отлетают» (отклики, скрининг, технички, финалы, сб),
— что сильнее всего тормозит.
📝 Заполнить форму — 1–2 минуты: https://forms.gle/8sSz4o4LFe2bp3DS7
На основе ответов я соберу аналитику по сложности рынка
— сделаю гайд по получению собесов для 2026 года
— разберу варианты резюме
— прокачаю подготовку к техническому собеседованию
Результаты выложу в канале, а тем, кто оставит контакт, отправлю первым
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥2😁1
#Собес #android #configuration #locale
🤔 Какие события относятся к смене конфигурации (смена темы, языка, формата времени / региона)?
💬 Кратко:
- Язык/регион: Да (если изменяется системная локаль).
- Тема: Да (если меняется системная тема, например, светлая/темная).
- Формат времени/региона: Да (если влияет на ресурсы приложения).
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Какие события относятся к смене конфигурации (смена темы, языка, формата времени / региона)?
💬 Кратко:
- Язык/регион: Да (если изменяется системная локаль).
- Тема: Да (если меняется системная тема, например, светлая/темная).
- Формат времени/региона: Да (если влияет на ресурсы приложения).
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #cherry_pick
🤔 Как перенести коммит из одной ветки в другую?
💬 Кратко:
Есть два основных способа:
-
- Интерактивный rebase (
Пример через
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как перенести коммит из одной ветки в другую?
💬 Кратко:
Есть два основных способа:
-
git cherry-pick — копирует конкретный коммит в текущую ветку.- Интерактивный rebase (
git rebase -i) — позволяет переупорядочивать или переносить несколько коммитов.Пример через
cherry-pick:git checkout target-branch # Переключаемся на ветку, куда переносим
git cherry-pick abc123 # abc123 — хеш коммита, который нужно перенести
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#tool #гит
📚 Хочешь изучить Git, не рискуя своей локальной установкой?
Теперь можно запускать команды Git прямо из браузера , с пошаговым объяснением, что делает каждая команда.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Хочешь изучить Git, не рискуя своей локальной установкой?
Теперь можно запускать команды Git прямо из браузера , с пошаговым объяснением, что делает каждая команда.
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #deadlock #livelock #multithreading
🤔 Как избежать deadlock/livelock при работе с блокировками?
💬 Кратко:
- Избегайте вложенных блокировок.
- Используйте таймауты (например,
- Упорядочивайте блокировки (всегда получайте
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как избежать deadlock/livelock при работе с блокировками?
💬 Кратко:
- Избегайте вложенных блокировок.
- Используйте таймауты (например,
tryLock(timeout)).- Упорядочивайте блокировки (всегда получайте
lockA перед lockB).📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал