如何避免在使用MVP方法的方法中传递大量参数

时间:2017-01-22 14:45:02

标签: android mvp

我有一个包含大量注册字段的注册屏幕,当用户单击注册按钮时,我将字段值传递给演示者。在演示者中,我验证这些值并创建一个对象。问题是register()方法中有大量参数。我认为我应该避免这种情况,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:0)

也许你可以探索Builder pattern。 它允许在需要传递大量参数时保持代码清洁。 当你不知道将要传递的参数的确切数量时,它也非常有用,因为它们中的一些可能不是必需的。

在实践中,你会有像

这样的东西
MyObject myObject
void register() {
    myObject = MyObject.Builder(<mandatory arguments>)
               .argument1(<argument 1>)
               .argument2(<argument 2>)
               ...
               .create();
    if (myObject == null) fail();
    else dosomething();
}

答案 1 :(得分:0)

我之前完成此操作的一种方法是在每个必须完成的字段上使用TextWatcher:

myEditText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {}

    @Override
    public void afterTextChanged(Editable s) {
        presenter.myEditTextChanged(s.toString());
    }
});

然后在演示者中使用相应的方法更新您的实体。这样,当用户最终点击注册时,所有细节都将在您的演示者中等待。

它还具有以下优点:您可以在用户进行时进行验证 - 即,在所有字段都有效之前,注册按钮不会启用。

如果您使用的是ButterKnife,RxBinding或DataBinding,则代码也更简洁。