我有一个快速的问题.我正在努力(并努力)用MVP设计模式设计我的应用程序.
我可以问,对于每个视图(活动,片段)我应该有一个单独的演示者类吗?
我在网上看到的资源并不多,显然有样本说明了MVP.如果他们有一些人可以共享吗?
PS我也在这个应用程序中使用RecyclerViewAdapter所以任何关于它的指针将不胜感激
提前致谢
Vas*_*liy 18
虽然陈旧,但这是一个非常有趣的问题.由于现在MVP/MVC/MVVM在Android社区中是一种"嗡嗡声",这个问题值得一个更完整的答案(恕我直言).
简短回答:
单个演示者可以与多个视图一起使用
答案很长:
通常,MVP/MVC没有一个单一的定义 - 有很多方法可以实现这些架构模式.你没有提供"你的"MVP的定义,因此我只能猜到你的想法.
也就是说,面向对象编程中有一些"最佳实践",任何架构模式的任何实现都应该(理想情况下)加以考虑.
您问的是,您是否可以重复使用具有不同视图的一个演示者实现,对吧?让我们通过SOLID原理的棱镜来看待这个问题.
"L"代表Liskov替代原则(LSP).这是SOLID中最容易被误解的原则之一,但该原则背后的一般理念如下:
LSP:如果一段代码与A类对象一起工作,它也应该与A的任何子类的对象无缝地工作(即子类必须可以在任何地方使用而不是A)
Android中LSP违规的示例是Context:(Context例如Application和Activity)的子类不等效.一些需要的代码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
}
Run Code Online (Sandbox Code Playgroud)
LSP声明任何实现的类SomeView都可以使用SomePresenter.主讲人不应该关心的执行是否SomeView传递给它Activity,Fragment或者,也许,只是一个模拟的单元测试.
因此,您的问题的完整答案是:只要演示者不依赖于特定的视图实现,而只依赖于他们的超类,一个演示者可以重复使用不同的视图.
附加信息:
我猜你问了你的问题,因为一方面,你觉得一个主持人应该能够处理不同的观点(只考虑不同用户界面的A/B测试),但另一方面,事实上观点Activity和Fragment让你感觉这个想法不舒服.
我个人认为,MVC/MVP既不是Activity也不Fragment应该是观点.这篇帖子背后的原因总结在这篇文章中:为什么Android中的活动不是UI元素.
我还建议你看一下在Android中实现MVP的不同方法- 如果你使用这个方法,那么你很明显,演示者应该可以使用不同的视图,你不会有这种"感觉不对劲"的感觉.
Model-View-Controller设计出现在软件设计的早期,最初用于按钮元素之类的东西。您可以使用MVP(与MVC基本相同)来实现模块化的体系结构,从而易于维护,并从逻辑中分离表示形式。
鉴于您的问题,我认为您确实希望每个视图一个类。这将是最常见的方法。
http://antonioleiva.com/mvp-android/给出了MVP的理论概述。
| 归档时间: |
|
| 查看次数: |
2469 次 |
| 最近记录: |