我在我的 Android 应用程序中使用 MVP 模式。我的要求是
<强>1。当用户点击“同步”按钮时同步捕获的数据
<强>2。 Job-scheduler 将在午夜调用后台服务并与服务器同步数据,即使应用程序未运行也是如此。
这两种情况的流程是:
1)当用户点击“同步”按钮时同步捕获的数据
getPresenter().notifySyncBtnPressed() 将被调用
notifySyncBtnPressed() 将通过调用 mModel.sync() 来指示模型
- Sync from Model 完整实现了从数据库中获取数据,上传到服务器并将结果通知Presenter
- Presenter 然后通过调用 getView().notifySyncFinished() 通知 View
注意:这个流程对我来说很清楚 - 如果需要建议改进
2) 将调用后台服务的作业调度程序(请在此处提供您的说明)
- BroadcastReceiver 将调用扩展 IntentService 的服务类
- 创建模型对象 (IModel model = new Model()) 并从 onHandleIntent() 调用 model.sync()。
- 由于没有 UI,因此无需调用演示器。并且无需通知状态。
- 一旦同步操作完成,服务将被终止。
请建议,
<强>1。这是从服务类调用模型(存储库)实例的正确方法吗?
<强>2。我也混淆了Model层和Repositiry层,MVP中的Model层和Repository层有什么区别吗?
最佳答案
现在我明白了为什么要从 Service 中获取 Presenter,如果是这样,我认为您应该专门为 Service 创建一个 Presenter。它非常硬核,但它是有道理的。
无论如何,这些步骤看起来都很好,演示者应该与“模型”(MVP 中的 M)交互,它通常由交互者组成。如果您想使用存储库模式,那将发生在交互器之后,并且将成为模型层的一部分。
我会将您的 IModel 重命名为 IInteractor,每个需要数据的组件都将与该类交互。存储库随后由交互器访问,并且对表示层不可见。
关于Android MVP - 如何在后台服务中创建模型/存储库实例以访问模型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44063494/