我开始在Android项目上实现MVP模式,我对在执行任何操作之前应该在哪里验证字段有一些疑问。
例如,如果我必须发送一个包含三个字段(名称,电子邮件,文本)的表单。 我应该验证活动中的字段还是应该将它们发送给Presenter进行验证?
如果与演示者的通信必须仅使用已经验证的正确数据,我还不能100%确定。
答案 0 :(得分:10)
这取决于我的建议(我通常做的):
将其视为网站的前端和后端,虽然不完全相同,但它确实可以帮助您澄清令人困惑的概念。
答案 1 :(得分:4)
视图永远不应该决定自己做事,演示者一直等待视频通知的事件,演示者决定做什么,视图只保持等待演示者的命令。
所以,不,验证是一个演示者任务,即使它是一个非常简单的任务,如验证字段。
答案 2 :(得分:1)
你可以在活动中这样做:
private Presenter mPrensenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
mPrensenter.load(name,email,text);
}
});
}
@Override
public void onRightDataValidated(){
}
然后有两个界面MainView和Prensenter:
public interface MainView{
void onRightDataValidated();
}
public interface Presenter{
void load(String name,String email,String text);
}
在Presenter的impl中,当数据需要在load方法中无效时,你可以使用MainView.onRightDataValidated来回调,你可以在我的github中找到更多MVP Demo
答案 3 :(得分:0)
我相信你应该在活动中进行验证。简单地说,演示者将调用验证方法来检查验证是否通过,然后它将完成操作,否则显示错误。 在我的一个客户的项目中,有详细页面,点击提交按钮,它应该检查是否填写了详细页面,然后它将保存订单的详细信息,否则显示错误。 这就是我实施的方式 -
在这里,您可以看到isDetailFilledOut()
是一种验证方法,如果验证通过true
,它将返回false
。
如果它返回true,则检查互联网是否也可用,然后通过调用模型的saveOrder方法保存订单,否则显示填写详细警告。
答案 4 :(得分:0)
MVP的部分目的是简化测试。如果您遇到这样的问题,例如“如果我从不测试视图,该怎么办”,那么这将为应该或不应该执行的逻辑提供正确的观点。演示者应该使自己能够进行快速的JUnit测试,并避免开发人员编写Android工具测试。
最重要的是,您将要测试验证逻辑,以确保它是正确的,并且如果将其放在Presenter中,则会使工作变得更轻松。