我已经使用MVP很长时间了,现在开始转向MVP和MVVM之间的混合状态。
具体来说,我的应用程序将如下所示:
- 每个Activity都有0到x个Fragment代表其视图
- 每个Fragment将请求Activity的ViewModel以便使用LiveData检索数据
- Activity将拥有一个单独的ViewModel,作为Presenter。在创建时,该ViewModel将被注入活动的ViewModel和LiveData,以便根据需要更新UI
- Presenter将获取发送到数据ViewModel的消息并将结果发送回去
我的问题:
- 在Presenter ViewModel中持有对数据ViewModel的引用会导致内存泄漏或其他不良影响吗?
- 业务逻辑应该放在Presenter还是模型部分中?
例如,假设我有一个项目列表,用户长按一个项目以编辑它们,这个架构的哪个部分应该负责检查用户是否有权限这样做,并允许他们编辑该项目或显示错误消息?
- 是否有一种方法使Fragment只获取Activity的ViewModel的一部分?
例如,假设活动下有3个片段,并且一个ViewModel来迎合它们
我可以使用类似于:
class MainViewModel : ViewModel() , IFragmentA, IFragmentB, IFragmentC
当我尝试在片段中获取ViewModel时,可以写出以下代码:
lateinit var viewModel: IFragmentA
override fun onAttach(context: Context?) {
super.onAttach(context)
vm = ViewModelProviders.of(context as AppCompatActivity).get(IFragmentA::class.java)
}
注意:我知道上面的代码不起作用,我的问题是是否有一种类似于这样的方法可以起作用。
- 发送消息回SingleEvents活动的正确方式是什么?
例如,如果用户尝试删除某个条目,并且我希望他们输入密码,流程是否如下:
- 片段将删除消息发送到其ViewModel
- ViewModel将其传递给Presenter
- Presenter决定在继续之前需要密码验证
- Presenter在ViewModel中设置SingleEvent的值
- ViewModel通知事件的订阅者(在这种情况下为MainActivity)显示一个对话框,要求输入密码
感谢您能提供的任何帮助。