Android MVP 对验证的怀疑

Android MVP doubts about validating

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

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

我还不能 100% 确定与演示者的交流是否必须仅使用已经验证的正确数据。

这真的取决于,我的建议是(以及我通常做的):

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

把它想象成一个网站的前端和后端,虽然不完全一样,但确实可以帮助你理清容易混淆的概念。

您可以在 activity 中这样做:

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中找到更多

好吧,我相信您应该在 activity 中进行验证。并且 Simply presenter 将调用验证方法来检查验证是否通过然后它将完成操作,否则显示错误。! 在我的一个客户项目中,有详细信息页面,单击提交按钮时,它应该检查详细信息页面是否已填写,然后它将保存包含详细信息的订单,否则会显示错误。 这就是我实施的方式——

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

View 永远不应该自己决定做事,presenter 一直在等待 view 通知的事件,然后 presenter 决定做什么,view 只保留来自 presenter 的等待命令。

所以,不,验证是一个演示者任务,即使它是一个非常简单的任务,例如验证一个字段。

MVP 的部分目的是使测试更容易。如果你处理这些问题,"What if I never tested the view," 那么这就给出了正确的观点,即哪些逻辑应该或不应该去那里。 Presenter 应该有助于快速 JUnit 测试,并使开发人员无需编写 Android 仪器测试。

最重要的是,您需要测试您的验证逻辑以确保它是正确的,如果您将它放在 Presenter 中,它会让生活更轻松。