🔎 Google оновив рекомендації по архітектурі в Android

💡 Усі статті, обговорення, новини про Mobile — в одному місці. Приєднуйтесь до Mobile спільноти!

В документації зʼявилася нова стаття з описом рекомендацій відносно побудови архітектури в Android застосунку.

Вони поділені на декілька частин і містять наступні рекомендації:

1. Layered Architecture

— data шар

— ui шар

— data шар новинен віддавати дані через Repository

 використовуйте Kotlin Coroutines & Flows

— domain шар тільки у великих застосунках

2. UI Layer

— дотримуйтесь Unidirectional Data Flow (UDF)

— використовуйте ViewModel 

— слухайте State через repeatOnLifecycle 

 не відравляйте евенти напряму з ViewModel на UI

— single activity

— Jetpack Compose

3. ViewModel

— ViewModel не повинна нічого знати про Context, Activity чи Resources 

— комунікація з UI через Kotlin Flows

— використовуєм Kotlin Coroutines для роботи з domain та data шарами

— не використовуйте ViewModel для екранів, які часто перевикористовуються

— не використовуйте AndroidViewModel 

 рекомендують використовувати Single State в комунікації між ViewModel та UI

4. Lifecycle

— ❗ не перевизначайте методи Activity/Fragment по типу onResume, onPause, onStart. Замість них використовуйте LifecycleObserver.

5. Dependencies

— впроваджуйте dependency injection (рекомендується старатися робити constructor injection)

— використовуйте скоупи для ефективного перевикористання

— гугл рекомендує Hilt

6. Testing

— ви повинні писати юніт тести для як мінімум data шару та ViewModels (я би ше добавив domain шар обовʼязковим)

— старайтесь використовувати Фейки замість Моків

— тестуйте StateFlow

7. Models

— в складних апках використовуйте різні моделі для кожного шару. Мається на увазі DTO для data шару, domain моделі, та UIState моделі.

8. Naming conventions

— добавляйте дієслово у назвах методів — makePayment() 

— проперті мають бути іменником — inProgressTopicSelection 

 потоки даних, по типу Flow мають мати префікс get — getAuthorStream(): Flow<Author> 

— в ідеалі, назви імплементацій інтерфейсів мають пояснювати їх суть (типу OfflineFirstNewsRepository або InMemoryNewsRepository). Якщо такого імені немає, то добавляти префікс Default — DefaultNewsRepository

В цілому, рекомендації є достатньо зрозумілими і очевидними, але ще не було єдиного місця в документації де би Google їх всіх зібрав. Тому, інформація корисна.

🔗 Більше — в Телеграм каналі IT & Android

👍ПодобаєтьсяСподобалось6
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

прочитав і готовий до інтерв’ю )

корисно, дякую :)

Гарна стаття. Є лінка на оригінальну версію?

Дякую автору за класний і зрозумілий огляд, коротко і по суті.
Не вистачає на мою думку рекомендацій інструментів контролю якості коду та їх налаштування (lint, detekt, ktlint, konsist).
Часто на різних проектах це все налаштовано по різному. А інколи і взагалі доводиться доводити чому це потрібно ;)

Дякую за відгук!
Ви праві сприводу лінтерів. Але тут, як я розумію, Google робить рекомендації використовуючи бібліотеки, які він сам підтримує або є партнером із розробниками (наприклад JetBrains).
Так як detekt, ktlint, та konsist це є по суті third-party бібліотеки, то відповідно Google і не рекомендує їх в своїй документації.
Єдине, вони рекомендують Android Lint (бо це їх рішення).
Але в спільноті Android розробників — detekt і Android Lint зазвичай є must-have.

Підписатись на коментарі