android-在MVP中使用Kotlin高阶函数

android-在MVP中使用Kotlin高阶函数,第1张

概述通常,使用Java,我们会创建一个* Contract接口来处理View和Presenter之间的交互,例如:主要活动作为视图public class MainActivity extends Activity implements MainContract { @Override public void onCreate(Bundle b) { p

通常,使用Java,我们会创建一个* Contract接口来处理VIEw和Presenter之间的交互,例如:

主要活动
作为视图

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

主讲人
作为主持人

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

主合同
作为接口

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

由于Kotlin具有“高阶函数”功能,我们是否应该简单地传递函数来处理视图和演示者之间的交互?可能是这样的:

视图:

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

主持人:

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

我不是在问这种可能性,而是在问这是否是最佳实践.最佳答案这个问题的答案是与技术限制相关的架构决策.您可以在Java(甚至在Java7中)中使用匿名实例来实现同一件事(当然,这样做会有更多样板,并且更难阅读).

MVP中具有视图实现的合同的想法是,每个演示者都知道如何获取, *** 纵和呈现给该合同.一个视图可能实现多个合同并具有多个演示者.同样,每个演示者实例仅适用于合同的一个实现,但是您可以有两个实例为两个不同的实现提供服务.

如果不是每个视图都符合每个演示者的合同,而是每个演示者的呼叫迟早都要花费lambda,您最终会遇到问题.

例如,假设一个演示者异步获取数据并将其缓存在内存中:

>视图调用演示者方法fetchData().
>演示者调用合同的showLoading()方法.
>(经过一段时间)
>演示者调用合同的hIDeLoading()和showData(data)方法.
>用户进行交互并再次触发fetchData()
>演示者使用缓存的数据调用showData()

在这种情况下,如果我们使用lambda而不是合约,则需要以相同的方法请求两个不同的lambda:一个用于缓存时间,另一个用于不缓存时间.
我们还将视图实现耦合到演示者,将来演示者接口的另一种实现可能不需要这两个lambda,因为逻辑已更改.

重要的是要记住,在MVP中,理想情况下,视图和演示者都通过接口相互通信,在这种情况下,演示者接口不应受实现细节的影响,而应公开其能够执行的 *** 作.

总结

以上是内存溢出为你收集整理的android-在MVP中使用Kotlin高阶函数 全部内容,希望文章能够帮你解决android-在MVP中使用Kotlin高阶函数 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1145067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存