android MVP - 我可以有多个演示者用于自定义视图和片段

Posted

技术标签:

【中文标题】android MVP - 我可以有多个演示者用于自定义视图和片段【英文标题】:android MVP - can I have multiple presenters for custom views and fragments 【发布时间】:2017-08-23 14:18:59 【问题描述】:

所以我有一个已经绑定到活动的演示者。这本书说,一个演讲者应该与一个观点联系在一起。但现在我添加了一些片段和许多自定义视图。我正在考虑将片段也视为视图。自定义视图将包含一些逻辑。当然,片段和自定义视图都包含在我的活动中。

我的问题是,我应该在片段和自定义视图中重复使用同一个演示者,还是每个视图都有自己的演示者?我意识到这都是基于意见的,但我想要测试和保持代码清洁的最佳方法。

如果我确实为所有这些少数几个提供了一个演示者,那么演示者使用的接口中将有许多回调方法。同时,如果我做相反的事情并为每个视图创建一个演示者,它可能更容易阅读,但我将如何测试它?

【问题讨论】:

【参考方案1】:

View (Activity) 可以有多个Presenters。如果Activity 有多个CustomViews,则每个CustomView 可以有一个巨大的PresenterPresenter。这取决于:

    如果所有CustomViews 都有相同的需求,那么一个Presenter 对所有CustomViews 就足够了。 Presenter's 范围还有两个选项:

    PresenterActivityScopeActivity 使用 Presenter 并从 Presenter 调用。然后发送命令、数据到CustomViews PresenterViewScope。每个CustomView 创建和销毁相同的Presenter

    如果CustomViews 不共享相同的需求,有一个PresenterViewInterface,它们将包含所有CustomViews 需求的方法,因此每个CustomView 必须实现ViewInterface 中声明的所有方法,留一些空白。

    如果CustomViewsPresenter有不同的需求和方法调用,应该有自己的Presenter

    如果CustomViews有不同的需求,也有一些共同的需求,他们有共同的需求在一个Presenter,具体的需求在他们自己的Presenters示例ActivityOne 具有 CustomViewOneCustomViewTwo。两个CustomViews 的共同Presenter 可以是FeedPresenter(考虑到两个CustomView 都有Feed List)。然后CustomViewOne 将拥有CustomPresenter1CustomViewTwo 将拥有CustomPresenter2 以满足他们的特定需求。

【讨论】:

【参考方案2】:

最佳实践是创建一个 basepresenter ,然后为每个实现 basepresenter 的视图创建 Presenter

【讨论】:

顺便说一句,这是我现在遵循的最佳方法。

以上是关于android MVP - 我可以有多个演示者用于自定义视图和片段的主要内容,如果未能解决你的问题,请参考以下文章

Android MVP - 应该避免在演示者中使用 R.string 引用吗?

应该将演示者(mvP)注入(dagger2)到android中的视图吗?

模型视图演示者 - 相同的视图,不同的演示者

Android MVP:处理presenter类中的所有异常

在 MVP 模式中,适配器应该持有模型还是演示者应该持有模型并让适配器引用它?

在 MVP 模式中,了解活动/上下文的演示者是不是是个坏主意?