Connect with us

Разработка

Полное руководство по написанию чистого кода Jetpack Compose

Следуя этим рекомендациям, разработчики смогут создавать модульные, поддерживаемые и производительные пользовательские интерфейсы, в полной мере использующие возможности декларативной природы Compose.

Опубликовано

/

     
     

Это руководство призвано помочь разработчикам освоить лучшие практики Jetpack Compose, обеспечив правильное наименование, структуру и управление композитными функциями.

В нем рассматриваются такие ключевые принципы, как правильное использование модификаторов, важность компонентов без состояния и контролируемых компонентов, а также эффективная обработка состояния путем его поднятия.

Следуя этим рекомендациям, разработчики смогут создавать модульные, поддерживаемые и производительные пользовательские интерфейсы, в полной мере использующие возможности декларативной природы Compose.

Давайте рассмотрим эти рекомендации и практики, чтобы создавать оптимизированные, хорошо структурированные приложения на Jetpack Compose, которые выдержат испытание временем.

Именуйте @Composable функции

Функции Composable, которые обычно возвращают единицы, должны начинаться с заглавной буквы (PascalCase).

Упорядочивайте @Composable параметры

Порядок параметров в компоненте может быть задан двумя различными способами:

1. Официальный способ, рекомендуемый Androi

  • Необходимые параметры
  • `modifier: Modifier = Modifier.`
  • Опциональные параметры
  • (необязательные) дополнительные @Composable лямбда

2. Последовательный, но достаточно эффективный подход

  • `modifier: Modifier = Modifier.`
  • Входные данные
  • Параметры, связанные с пользовательским интерфейсом (цвет фона, стиль, цвет, форма и т.д.)
  • Колбек лямбда-функций
  • @Composable содержимое лямбда

Почему второй способ предпочтительнее?

  • Он предполагает, что параметры организованы в виде групп, что облегчает поиск и модификацию компонентов.
  • Нам не нужно задумываться о том, являются ли параметры обязательными или необязательными. Нам просто нужно добавить их в соответствующую группу. Например, если вы хотите добавить BorderStroke в вышеприведенный пример, просто найдите раздел, где перечислены параметры, связанные с пользовательским интерфейсом, и добавьте его туда.
  • Упорядочивание всех композабл параметров будет иметь схожую структуру.

Выдавайте содержимое ИЛИ возвращайте значение

  • @Composable функции должны либо выдавать содержимое в композицию, либо возвращать значение, но не то и другое.
  • Если компонуемый объект должен предлагать дополнительные управляющие поверхности своему вызывающему объекту, вызывающий объект должен предоставить эти управляющие поверхности или обратные вызовы в качестве параметров для composable функции.

Не генерируйте несколько частей контента

  • Композитная функция должна выдавать либо 0, либо 1 фрагмент макета, но не более одного.
  • Композитная функция должна быть целостной и не зависеть от того, из какой функции она вызывается.
  • Эта практика гарантирует, что composable будет вести себя так, как определено, для всех, кто ее вызывает.

Composable должен принимать и уважать модификатор

  • Composable должен принимать параметр типа Modifier. Этот параметр должен иметь имя «modifier» и должен быть первым параметром композита. Композабл не должен принимать несколько параметров Modifier.
  • Composable должен предоставлять свой параметр Modifier ноде Compose UI, который он генерирует, передавая его корневому вызываемому composable. Если Composable непосредственно генерирует узел ноду Compose UI, модификатор должен быть предоставлен этому узлу.

Предпочитайте композиты без состояния и управляемые композиты

  • В данном контексте без состояния (stateless) относится к композитам, которые не сохраняют собственного состояния, а принимают внешние параметры состояния, которые принадлежат и предоставляются вызывающей стороной.
  • Контролируемый (controlled) относится к идее, что вызывающая сторона имеет полный контроль над состоянием, предоставляемым composable.

Состояние должно быть поднято вверх

  • Для реализации однонаправленного потока Compose поддерживает паттерн подъема состояния вверх, позволяя большинству ваших композитных функций существовать без состояния
  • На практике есть несколько общих моментов, на которые следует обратить внимание:
    • Не передавайте View Model (или объекты из DI) вниз.
    • Не передавайте вниз экземпляры State<Foo> или MutableState<Bar>.
  • Вместо этого передавайте в функцию соответствующие данные и необязательные лямбды для обратных вызовов.
  • Не беспокойтесь о длинном списке параметров.
  • Не все композиты будут stateless; один композит будет stateful и будет передавать состояние другим композитам.

Используйте Padding, предоставляемый Scaffold

  • Всегда используйте стандартный паддинг, предоставляемую Scaffold.

Избегайте добавления некоторых модификаций непосредственно в корневой компонент композита

  • Избегайте применения следующих модификаций к корневому компоненту composable, поскольку вызывающая сторона должна управлять этими модификаторами для обеспечения повторного использования и гибкости. Такая практика позволяет не ограничивать использование composable конкретными случаями применения, позволяя внешнему коду контролировать его внешний вид и поведение:
    • padding()
    • fillMaxWidth()
    • fillMaxHeight()
    • fillMaxSize()
    • width()
    • height()
  • Избегайте любых других модификаторов, которые управляют компоновкой компонента изнутри.
  • Такой подход позволяет вызывающей стороне предоставлять свои модификаторы, гарантируя, что компонент может быть адаптирован к различным сценариям.

Заключение

Jetpack Compose расширяет возможности разработки пользовательского интерфейса для Android, но освоение лучших практик его использования крайне важно. Придерживаясь описанных здесь «за» и «против», разработчики смогут создавать чистый, удобный в обслуживании код, избегая распространенных ошибок. Принятие этих принципов также поможет избежать неэффективности, обеспечивая создание масштабируемых приложений, использующих весь потенциал Compose для создания надежных, оптимизированных пользовательских интерфейсов.

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: