Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

140
Visualizações
Usar funciones de orden superior de Kotlin en MVP

Normalmente, con Java, creamos una interfaz *Contract para manejar la interacción entre View y Presenter , como:

Actividad principal
como View

 public class MainActivity extends Activity implements MainContract { @Override public void onCreate(Bundle b) { presenter.requestData(); } @Override public void showData(String data) { // Handle data ... }

Presentador principal
como Presenter

 public class MainPresenter { public void requestData() { contract.showData("data"); } }

Contrato principal
como interface

 public interface MainContract { void showData(String data); }

Dado que Kotlin tiene la función "Función de orden superior" , ¿ deberíamos simplemente pasar funciones para manejar la interacción entre la vista y el presentador? Puede ser algo como:

Vista:

 presenter.requestData { data -> // Handle data }

Presentador:

 fun requestData(handler: (String) -> Unit) { handler("data") }

No estoy preguntando sobre la posibilidad, estoy preguntando si es una mejor práctica o no.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

La respuesta a esta pregunta está más relacionada con las decisiones arquitectónicas que con las limitaciones técnicas. Podría implementar lo mismo en Java (incluso en Java7) con instancias anónimas (concedido que tendría mucho más repetitivo y sería más difícil de leer).

La idea de MVP para tener un contrato que implementa la vista es que cada presentador sepa cómo obtener, manipular y presentar dicho contrato. Potencialmente, una vista puede implementar múltiples contratos y tener múltiples presentadores. Además, cada instancia de presentador solo funciona con una implementación del contrato, pero podría tener dos instancias que sirvan a dos implementaciones diferentes.

Si en lugar de que cada vista se ajuste a los contratos de cada presentador, cada llamada del presentador toma una lambda, tarde o temprano terminará enfrentando un problema.

Por ejemplo, imagine un presentador que obtiene datos de forma asíncrona y los almacena en caché en la memoria:

  1. La vista llama al método del presentador fetchData() .
  2. El presentador llama al método showLoading() del contrato.
  3. (pasa un tiempo)
  4. El presentador llama a hideLoading() y showData(data) del contrato.
  5. El usuario interactúa y activa fetchData() nuevamente
  6. El presentador llama a showData() con los datos almacenados en caché

En este caso, si usamos lambdas en lugar de un contrato, necesitaríamos solicitar dos lambdas diferentes en el mismo método: una para cuando está en caché y otra para cuando no lo está. También estamos acoplando la implementación de la vista al presentador; en el futuro, es posible que otra implementación de la interfaz del presentador no necesite estas dos lambdas porque la lógica ha cambiado.

Es importante recordar que en MVP, idealmente, tanto la vista como el presentador se comunican entre sí a través de interfaces y, en este caso, la interfaz del presentador no debe verse influenciada por los detalles de implementación y solo exponer qué acciones pueden realizar.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda