Почему мы должны использовать интерфейс в шаблоне MVP для Android? - PullRequest
2 голосов
/ 24 марта 2019

Я создаю приложение Android , используя Kotlin , впервые используя шаблон MVP . Мои вопросы: зачем мне нужны интерфейсы для View и Presenter, так как Kotlin предоставляет функции более высокого порядка? Разве мы не можем просто общаться, используя эти функции более высокого порядка? Плохо ли использование шаблона без интерфейсов?

Я посмотрел и прочитал много статей и учебных пособий, но не ответил на мой вопрос. Является ли то, что я делаю в коде ниже, неправильной практикой? Может кто-нибудь объяснить это мне?

В моей Активности

override fun init() {

    btn_login.setOnClickListener {
        LoginPresenter.userLogin(et_emailAddress.text.toString(),et_password.text.toString()){
            if (it){
                //do something
            }else{
                //do something
            }
        }
    }
}

Мой ведущий

object LoginPresenter {

fun userLogin(emailId: String, password: String, completion: (Boolean) -> Unit) {
    //do something
    completion(true)
 }
}

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Зачем мне нужны интерфейсы для View и Presenter, поскольку Kotlin предоставляет функции более высокого порядка?

Это довольно распространенная практика в разработке программного обеспечения. И хотя вы не можете использовать интерфейсы, есть ряд ключевых моментов, почему интерфейсы предпочтительнее. С макушки головы:

  1. с интерфейсом вы можете иметь несколько его реализаций, не заботясь о конкретном типе реализации. Это то, чего вам не хватает в функциях высшего порядка - вы ограничены единственным типом LoginPresenter при использовании метода LoginPresenter.userLogin().

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

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

  4. Сопровождение и расширение кода становится намного сложнее при конкретной реализации.

1 голос
/ 24 марта 2019
  1. Стоимость функций более высокого порядка

    Официальная документация Kotlin о стоимости функций высшего порядка

    Использование функций высшего порядканалагает определенные штрафы времени выполнения: каждая функция является объектом, и она захватывает замыкание, то есть те переменные, к которым осуществляется доступ в теле функции.Выделение памяти (как для объектов-функций, так и для классов) и виртуальные вызовы приводят к накладным расходам во время выполнения.

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

2.Интерфейсы могут содержать несколько функций, для которых вам понадобятся отдельные параметры функций при использовании функций более высокого порядка.Рассмотрим следующий случай:

interface UserLoginInterface {
      fun onLoginSuccess(loggedInUser: User)
      fun onLoginFailure(error: ErrorResponse)
      fun onRedirect(someOtherObjectWithDirectives: SomeDataClass)
 }

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

...