当前位置:  开发笔记 > 编程语言 > 正文

MVP Android - 有多少主持人?

如何解决《MVPAndroid-有多少主持人?》经验,为你挑选了2个好方法。

我有一个快速的问题.我正在努力(并努力)用MVP设计模式设计我的应用程序.

我可以问,对于每个视图(活动,片段)我应该有一个单独的演示者类吗?

我在网上看到的资源并不多,显然有样本说明了MVP.如果他们有一些人可以共享吗?

PS我也在这个应用程序中使用RecyclerViewAdapter所以任何关于它的指针将不胜感激

提前致谢



1> Vasiliy..:

虽然陈旧,但这是一个非常有趣的问题.由于现在MVP/MVC/MVVM在Android社区中是一种"嗡嗡声",这个问题值得一个更完整的答案(恕我直言).

简短回答:

单个演示者可以与多个视图一起使用

答案很长:

通常,MVP/MVC没有一个单一的定义 - 有很多方法可以实现这些架构模式.你没有提供"你的"MVP的定义,因此我只能猜到你的想法.

也就是说,面向对象编程中有一些"最佳实践",任何架构模式的任何实现都应该(理想情况下)加以考虑.

您问的是,您是否可以重复使用具有不同视图的一个演示者实现,对吧?让我们通过SOLID原理的棱镜来看待这个问题.

"L"代表Liskov替代原则(LSP).这是SOLID中最容易被误解的原则之一,但该原则背后的一般理念如下:

LSP:如果一段代码与A类对象一起工作,它也应该与A的任何子类的对象无缝地工作(即子类必须可以在任何地方使用而不是A)

Android中LSP违规的示例是Context:(Context例如ApplicationActivity)的子类不等效.一些需要的代码Context可以无缝地工作Application,但如果你通过Activity,则会发生内存泄漏(这是Android应用程序中非常普遍的错误,主要是由于Google的开发人员违反了LSP).

回到顶部你的问题.我假设您的演示者看起来像这样(注意视图的界面):

public class SomePresenter {

    /**
     * Views bound to this presenter must implement this interface
     */
    interface SomeView {
        void doSomething1();
        void doSomething2();
    }

    public void bindView(SomeView someView) {
        // view binding logic
    }

    // more presenter's methods

}

LSP声明任何实现的类SomeView都可以使用SomePresenter.主讲人不应该关心的执行是否SomeView传递给它Activity,Fragment或者,也许,只是一个模拟的单元测试.

因此,您的问题的完整答案是:只要演示者不依赖于特定的视图实现,而只依赖于他们的超类,一个演示者可以重复使用不同的视图.

附加信息:

我猜你问了你的问题,因为一方面,你觉得一个主持人应该能够处理不同的观点(只考虑不同用户界面的A/B测试),但另一方面,事实上观点ActivityFragment让你感觉这个想法不舒服.

我个人认为,MVC/MVP既不是Activity也不Fragment应该是观点.这篇帖子背后的原因总结在这篇文章中:为什么Android中的活动不是UI元素.

在此输入图像描述

我还建议你看一下在Android中实现MVP的不同方法- 如果你使用这个方法,那么你很明显,演示者应该可以使用不同的视图,你不会有这种"感觉不对劲"的感觉.


这个答案让我觉得我很短暂但接受了答案:/
@Gewure,我认为任何人都不应该对旧问题的答案感到不满.当你发布答案时,MVP在Android中是一种新东西.我的时间比你多;)

2> Gewure..:

Model-View-Controller设计出现在软件设计的早期,最初用于按钮元素之类的东西。您可以使用MVP(与MVC基本相同)来实现模块化的体系结构,从而易于维护,并从逻辑中分离表示形式。

鉴于您的问题,我认为您确实希望每个视图一个类。这将是最常见的方法。

http://antonioleiva.com/mvp-android/给出了MVP的理论概述。

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有