我有这个变量在我的ViewModel:
private String chosenDay;
,当我想设置选定的日期时,我使用setter函数:
public void setChosenDate(String date){
chosenDay = date;
}
当我想使用它时,我使用getter:
public String getChosenDay(){
return chosenDay;
}
我的问题是:你认为这是一个很好的做法,使用getter和setter为viewModel或者我可以直接从活动访问变量?
viewModel.chosenDay = "Monday"
谢谢你!
真的取决于你想写你的代码。如果您希望遵循面向对象原则,那么您的示例就是正确的方式。你正在做"封装"。
封装是四个基本的面向对象概念之一。
封装的好处:
- 类的字段可以设置为只读或只写。
- 类可以完全控制存储在其字段中的内容。
将变量存储在ViewModel
中对我来说听起来像是一种更好的方法:当您旋转屏幕时,存储在Activity
中的所有变量将被清除,您需要手动处理它们的恢复(onSaveInstanceState
->onCreate
)。
但这不是视图模型的情况(通常),因为它们打算在这样的转换中幸存下来,因此值将保持其状态,而不需要额外的努力。
我认为这其中有一些"意识形态"。在ViewModels/presentors中存储状态的原因:通常认为最小化UI层(Fragments, Activities等)中存储的代码和状态是一个很好的实践
YourViewModel用于处理视图所需的数据,或者你想从网络调用收集数据,以便在Activity/Fragment中向用户显示它们,如果你有一个特定的情况,你想保存chosenDate使用它可能在另一个活动/片段,你可以使用setter和getter,获取和设置日期,使用它在另一个活动/片段通过使用共享ViewModel的否则你也可以将它用于一个活动/片段,这完全取决于你的用例。