Android MVP对验证有疑问

时间:2016-04-22 07:35:05

标签: android validation mvp

我开始在Android项目上实现MVP模式,我对在执行任何操作之前应该在哪里验证字段有一些疑问。

例如,如果我必须发送一个包含三个字段(名称,电子邮件,文本)的表单。 我应该验证活动中的字段还是应该将它们发送给Presenter进行验证?

如果与演示者的通信必须仅使用已经验证的正确数据,我还不能100%确定。

5 个答案:

答案 0 :(得分:10)

这取决于我的建议(我通常做的):

  • 如果可以验证字段无法访问数据库复杂操作,我会在活动中执行此操作。此类字段的示例如下:密码(密码需要包含至少7个字符),年龄(年龄必须为数字)
  • 如果该字段需要通过访问数据库(或通过Web服务)进行验证,或操作需要复杂的逻辑和资源,请在演示者中进行验证。此类字段的示例如下:用户名(通过访问数据库检查它是否是重复的用户名)

将其视为网站的前端和后端,虽然不完全相同,但它确实可以帮助您澄清令人困惑的概念。

答案 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)

我相信你应该在活动中进行验证。简单地说,演示者将调用验证方法来检查验证是否通过,然后它将完成操作,否则显示错误。 在我的一个客户的项目中,有详细页面,点击提交按钮,它应该检查是否填写了详细页面,然后它将保存订单的详细信息,否则显示错误。 这就是我实施的方式 - enter image description here

在这里,您可以看到isDetailFilledOut()是一种验证方法,如果验证通过true,它将返回false。 如果它返回true,则检查互联网是否也可用,然后通过调用模型的saveOrder方法保存订单,否则显示填写详细警告。

答案 4 :(得分:0)

MVP的部分目的是简化测试。如果您遇到这样的问题,例如“如果我从不测试视图,该怎么办”,那么这将为应该或不应该执行的逻辑提供正确的观点。演示者应该使自己能够进行快速的JUnit测试,并避免开发人员编写Android工具测试。

最重要的是,您将要测试验证逻辑,以确保它是正确的,并且如果将其放在Presenter中,则会使工作变得更轻松。