🔎 Google оновив рекомендації по архітектурі в Android
В документації зʼявилася нова стаття з описом рекомендацій відносно побудови архітектури в 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 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівпрочитав і готовий до інтерв’ю )
корисно, дякую :)
Радий чути :)
Гарна стаття. Є лінка на оригінальну версію?
Дякую!
Звісно — developer.android.com/...hitecture/recommendations
Дякую автору за класний і зрозумілий огляд, коротко і по суті.
Не вистачає на мою думку рекомендацій інструментів контролю якості коду та їх налаштування (lint, detekt, ktlint, konsist).
Часто на різних проектах це все налаштовано по різному. А інколи і взагалі доводиться доводити чому це потрібно ;)
Дякую за відгук!
Ви праві сприводу лінтерів. Але тут, як я розумію, Google робить рекомендації використовуючи бібліотеки, які він сам підтримує або є партнером із розробниками (наприклад JetBrains).
Так як detekt, ktlint, та konsist це є по суті third-party бібліотеки, то відповідно Google і не рекомендує їх в своїй документації.
Єдине, вони рекомендують Android Lint (бо це їх рішення).
Але в спільноті Android розробників — detekt і Android Lint зазвичай є must-have.