嗨,我在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()我认为封装的概念适用于这些情况。
问题是,这是否真的是不好的做法?
谢谢
答案 0 :(得分:1)
是的,这是不好的做法;您的吸气者不应修改任何状态(自己或通过调用设置器),只需对其进行检查并公开即可。
解决特定问题的方法是执行以下两项操作之一:
让您的getter返回一个空字符串而不是recipeService.save()
,而无需修改存储的值。
null
让您的设置者将输入的private String getEmailValue() {
String emailValue = email.getValue();
return emailValue != null ? emailValue : "";
}
值替换为空字符串。
null
这样,您可以确保在调用private String setEmailValue(String email) {
email.setValue(email != null ? email : "");
}
时始终会得到非null的getEmailValue()
,但绝不会从设置器中修改对象。