我正在查看MVP的google示例,并且发现this是该活动onCreate
中的最后一个声明:
new TaskDetailPresenter(
taskId,
Injection.provideTasksRepository(getApplicationContext()),
taskDetailFragment);
这段代码对我来说很奇怪。
它实例化了一个本地对象并且未分配任何位置的对象(TaskDetailPresenter),并将其中的fragment与演示者关联。
定义的类here
这真的应该完成吗?因为对我来说这似乎不是一个好习惯
答案 0 :(得分:2)
在TaskDetailPresenter
构造函数中,它们具有:
mTaskDetailView.setPresenter(this);
因此,presenter对象将传递到片段(MVP中的“视图”)。该片段存储了对演示者的引用。没关系-View可以通过此配置轻松与其演示者进行通信。
但是他们在这里使用的技巧-在构造函数完成之前调用setPresenter(this)
是一件坏事。在这里您可以找到有关此问题的说明:http://www.javapractices.com/topic/TopicAction.do?Id=252
如果该引用仅保存到属性中并且所有事情都在一个线程中发生,那可能没问题。但是将来可能会发生某些变化,我们可能会遇到麻烦。