Что лучше использовать Dagger 2 или Koin в приложении Android - PullRequest
4 голосов
/ 07 января 2020

Я хочу создать приложение-клон, такое как Instacart, не могли бы вы помочь мне с выбором инъекций зависимостей, одним из них и почему.

Ответы [ 2 ]

6 голосов
/ 07 января 2020

Koin намного проще с более чистым синтаксисом, и если вы используете kotlin (что я думаю, если вы не зададите этот вопрос), я рекомендую использовать Koin, он написан на чистом kotlin с использованием только функционального разрешения (без отражения, без генерации кода) и сводит стандартный код к минимуму. он поддерживает ViewModels

, но Dagger написан на java, он гораздо более сложный, трудный для изучения, и он использует аннотации, что означает генерацию кода, таким образом, больше строк кода и больше времени сборки, и это требует Гораздо больше стандартного кода

. Вот как работает Коин:

class MyFragment() {

    private val viewModel by viewModel<MyViewModel>()
}

inline fun <reified T : ViewModel> LifecycleOwner.viewModel(
        qualifier: Qualifier? = null,
        noinline parameters: ParametersDefinition? = null
): Lazy<T> = lazy { getViewModel<T>(qualifier, parameters) }

, с другой стороны, Dagger официально поддерживается Google, что означает большую поддержку в сообществах и, возможно, меньше ошибок. это мощный и хорошо работает. Dagger генерирует код во время сборки и делает инъекцию только во время выполнения путем прямого назначения поля, так что вы получаете ошибки во время компиляции, но Koin делает внедрение во время выполнения, поэтому, если вы не будете осторожны, вы можете получить исключения во время выполнения. и поскольку Dagger генерирует коды во время компиляции, он имеет лучшую производительность, чем Koin, а Koin намного медленнее, чем Dagger, как в процессах настройки, так и в процессах внедрения, это делает Dagger лучше для больших проектов!

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

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

, вот как Dagger2 работает:

enter image description here

Я лично рекомендую Koin хотя бы для небольших и средних проектов, но Google рекомендует Dagger2. они оба достаточно хороши, и вы должны решить, какой из них подходит вам и вашему проекту

, для получения дополнительной информации прочитайте эти статьи:

Сравнение кинжала 2 и Коина

Коин против Кинжала, передай привет Коину

Инъекция зависимостей с Коин

Коин Д.И. & Сравнение Android Каркас ввода зависимостей

koin android пример - DI In Android

Внедрение зависимостей в Android

Коин против Dagger (Сервисный локатор против DI)

Инъекция зависимости от Сервисного локатора

6 голосов
/ 07 января 2020

Позвольте мне объяснить это.

  1. Если вы используете Java в своем проекте, тогда Dagger, но если вы
    используете kotlin, тогда используйте Koin.

  2. Если размер вашего предмета намного больше, используйте Dagger, а если маленький - Koin.

  3. Основное различие между коином и Dagger, Dagger очень сложный интегрировать, а Koin интегрировать гораздо проще.

  4. Кинжал использует слишком много обработки аннотаций, но koin не обрабатывает аннотации.

  5. Коин взаимодействует с моделью вида, а кинжал не взаимодействует.

  6. В ошибках коинов, найденных во время выполнения, но в ошибках кинжалов можно найти во время компиляции ie.

Итак, когда вы начинаете свой проект, я думаю, что Коин будет лучшим вариантом.

...