【问题标题】:How is the presenter created in MVP?在 MVP 中如何创建演示者?
【发布时间】:2018-08-31 17:59:53
【问题描述】:

我正在查看 MVP 的 google 示例,我看到 this 是活动的 onCreate 中的最后一条语句:

new TaskDetailPresenter(  
                taskId,  
                Injection.provideTasksRepository(getApplicationContext()),  
taskDetailFragment);

我觉得这段代码很奇怪。
它实例化了一个本地对象 (TaskDetailPresenter),该对象未分配到任何地方,并将 fragment 与演示者相关联。
定义的类here
这真的是应该怎么做的吗?因为这对我来说似乎不是一个好习惯

【问题讨论】:

标签: java oop design-patterns mvp android-mvp


【解决方案1】:

TaskDetailPresenter 构造函数中他们有:

mTaskDetailView.setPresenter(this);

所以演示者对象被传递给片段(MVP 中的“视图”)。该片段存储对演示者的引用。没关系 - View 可以使用此配置轻松与其演示者通信。

但是他们在这里使用的技巧——在构造函数完成之前调用setPresenter(this) 是一件坏事。在这里你可以找到这个问题的解释:http://www.javapractices.com/topic/TopicAction.do?Id=252

如果该引用只是保存到一个属性并且一切都发生在一个线程中,那可能没问题。但是将来可能会发生一些变化,我们可能会遇到麻烦。

【讨论】:

  • 那么 new TaskDetailPresenter(..) 是该函数的变量的局部变量,在方法主体之后超出范围的事实不相关,因为视图保留对该演示者的引用?在我为 android 搜索的在线 mvp 示例中,这似乎也是常见的方法
  • @Jim 是的,这不相关,因为视图保留了对演示者的引用,这可以防止它被垃圾收集。
猜你喜欢
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2011-02-25
相关资源
最近更新 更多