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