Не пишите один и тот же код дважды или более в своем проекте.

Функция расширения

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

Функции расширения — хороший выбор, чтобы не повторять одни и те же функции и использовать их во всем проекте. Например, при программировании Android и поддержке устройств в любом API нам нужно проверить версию API и выполнить правильную работу для каждой ситуации:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { }
else { }

Мы можем использовать функцию расширения для приведенного выше кода и удалить все стандартные коды и очистить наш проект:

if (isSdkEqualOrGreaterThan23()) { }
else { }

Or :

inline fun aboveApi(api: Int, included: Boolean = false, block: () -> Unit) {
    if (Build.VERSION.SDK_INT > if (included) api — 1 else api) {
        block()
    }
}

Таким образом, эти небольшие приемы делают наш код и проект чище и читабельнее, а членам команды требуется меньше времени на отладку и поиск ошибок.

Базовый класс (абстракция)

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

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

Позвольте мне поговорить с примером. все разработчики создают BaseActivity, BaseFragment, BaseViewModel, и это хорошо для обработки жизненных циклов и повторяющихся кодов, но иногда, например, у нас есть некоторая страница, содержащая карту, и чтобы избежать написания стандартных кодов, используйте базовый класс (BaseFragmentMap) для этой проблемы и перемещайте все то же самое. коды к нему и очистить свой код.

Класс-оболочка

Иногда вы делаете одни и те же вещи в своих классах или пишете функции и не уверены на 100%, что может измениться в будущем или, возможно, будет доступен более чистый код. Так что не используйте их дважды и создайте класс Wrapper или Interface , а затем реализуйте их, и это поможет вам изменить две или сотни мест в будущем, если возникнут какие-то ошибки или будет доступен более чистый код.

Также не используйте библиотеки напрямую в своем проекте. Например, не используйте Glide/Picasso/Coil непосредственно в своем проекте, а создайте класс-оболочку или интерфейс, например ImageLoader, и позвольте им делегировать задачи загрузки изображений.

Другой пример: возможно, вам нужно обработать некоторые Drawables и Pictures, поэтому не повторяйте их, а создавайте классы Helper или Utils и используйте их без сомнений.

Или иногда, например, вам нужно прочитать OTP с новой библиотекой Google и обработать коды подтверждения/обработать onActivityResult/обработать код извлечения и приемник конфигурации и т. д., поэтому вам нужно повторять эти операции на каждой отдельной странице или вместо этого использовать Wrapper class и обрабатывать все темы и вызывать их в нужных местах:

Заключение

Не повторяйтесь (DRY) и позвольте исходному коду проекта быть чище, а будущим изменениям потребуется меньше времени для отладки или улучшения.

Линкедин