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