在get中使用set是不好的做法吗?

时间:2019-02-12 12:49:06

标签: design-patterns android-mvvm

嗨,我在android项目中使用MVVM模式,对于ViewModel,代码如下:

public class LoginViewModel extends ViewModel {

    public MutableLiveData<User> user = new MutableLiveData<>();
    public MutableLiveData<String> email = new MutableLiveData<>();
    public MutableLiveData<String> password = new MutableLiveData<>();
    public MutableLiveData<Boolean> emailError = new MutableLiveData<>();
    public MutableLiveData<Boolean> register = new MutableLiveData<>();
    private LoginRespository loginRespository = new LoginRespository();
    private MutableLiveData<Boolean> enable = new MutableLiveData<>();

    public LoginViewModel() {
    }

    public void login() {
        ...
    }

    public void startRegister() {
        ...
    }

    private String getEmailValue() {
        if (email.getValue() == null) {
            email.setValue("");
        }

        return email.getValue();
    }
....
}

在办公室里,我们讨论了在get中使用set是一个不好的习惯,但是我认为这不是一个不好的习惯,因为java允许空值,并且我不想在调用时获取空值getEmailValue()我认为封装的概念适用于这些情况。

问题是,这是否真的是不好的做法?

谢谢

1 个答案:

答案 0 :(得分:1)

是的,这是不好的做法;您的吸气者不应修改任何状态(自己或通过调用设置器),只需对其进行检查并公开即可。

解决特定问题的方法是执行以下两项操作之一:

  1. 让您的getter返回一个空字符串而不是recipeService.save()而无需修改存储的值

    null
  2. 让您的设置者将输入的private String getEmailValue() { String emailValue = email.getValue(); return emailValue != null ? emailValue : ""; } 值替换为空字符串。

    null

这样,您可以确保在调用private String setEmailValue(String email) { email.setValue(email != null ? email : ""); } 时始终会得到非null的getEmailValue(),但绝不会从设置器中修改对象。