Android 在MVP中使用Kotlin高阶函数
通常使用Java,我们会制作一个Android 在MVP中使用Kotlin高阶函数,android,kotlin,android-mvp,Android,Kotlin,Android Mvp,通常使用Java,我们会制作一个*契约接口来处理视图和演示者之间的交互,如: 主要活动 作为视图 public class MainActivity extends Activity implements MainContract { @Override public void onCreate(Bundle b) { presenter.requestData(); } @Override public void showData(String data) { // Handl
*契约
接口来处理视图和演示者之间的交互,如:
主要活动作为
视图
public class MainActivity extends Activity implements MainContract {
@Override
public void onCreate(Bundle b) {
presenter.requestData();
}
@Override
public void showData(String data) {
// Handle data ...
}
主演示者作为演示者
public class MainPresenter {
public void requestData() {
contract.showData("data");
}
}
主合同作为
接口
public interface MainContract {
void showData(String data);
}
由于Kotlin具有“高阶函数”的功能,我们是否应该传递函数来处理视图和演示者之间的交互?它可以是这样的:
视图:
演示者:
fun requestData(handler: (String) -> Unit) {
handler("data")
}
我不是在问这种可能性,我是在问这是否是一种最佳实践。这个问题的答案更多的是相关的架构决策,而不是技术限制。您可以使用匿名实例在Java(甚至在Java7中)中实现同样的事情(假定它会有更多的样板文件,并且更难阅读) MVP中视图实现的契约的思想是,每个演示者都知道如何获取、操作和呈现所述契约。一个视图可能会实现多个协定并具有多个演示者。此外,每个presenter实例仅适用于一个契约实现,但您可以有两个实例服务于两个不同的实现 如果不是每个视图都符合每个演示者的约定,而是演示者的每次调用都会占用lambda,那么迟早您会遇到问题 例如,假设演示者异步获取数据并将其缓存在内存中:
fetchData()
showLoading()
方法hideLoading()
和showData(data)
方法fetchData()
showData()
fun requestData(handler: (String) -> Unit) {
handler("data")
}