Android MVP解释
Android MVP explanation
我试图了解编写 "clean" Android 应用程序的最佳方法。我发现了一个有趣的 article,他们使用一种 3 层架构。
现在我读到 android 使用 MVP 设计模式并尝试理解这一点。我理解 MVP 原则(在 android 上下文中)的方式是:
- 模型层是逻辑类
- 主持人是 类 "linked" 到 XML(活动)
- 被动观点是XML。
这是正确的吗?
当这是正确的时候,3 层模型完全符合 MVP 原则也是正确的吗 因为:
- 3 层架构中的表示层适合 MVP 的表示层
- 3 层架构的业务和数据层非常适合 MVP 的模型部分?
我希望我的问题很清楚,因为这对我来说是一个复杂的话题。
也许这让我对这个问题有了清晰的认识(思维方式)..。
我想澄清的第一件事是,MVP 或与此相关的任何其他模式并不特定于 Android dev,并且可以应用于任何其他框架。
我想你明白了要点:
- 视图通常由活动和片段实现,并将包含对演示者的引用
- 演示者是视图和模型之间的中间人。从模型中检索数据,returns 它已经格式化为视图,因此除了显示它不需要做任何其他事情。
- 模型可以简单地看作 "data provider"。它可以像你想要的那样复杂,使用内部数据库,大量的类等。
如果您对 Android 应用架构感兴趣,我建议您观看今年在 Android 开发者峰会上发表的演讲。这是我见过的最好的之一
尽管这个问题有答案,但我认为这个答案无论如何都不完整。
MVP 是一个通用概念,可以有许多不同的实现,其中一些有很大的不同。而且,这个概念本身是非常模糊的——当他们说 MVP 时,不同的人可能有不同的概念。最普遍的一种如下图所示:
无论实现如何,MVP 组件的一般定义是:
- 模型:"application state storage" 的抽象。 "state" 的定义及其存储方式是实现细节。模型实现不应依赖于 View 或 Presenter。
- 视图:"user interface" 的抽象。 "user" 是谁以及它如何与视图交互的定义是实现细节。 View 实现不应依赖于 Model 或 Presenter。
- Presenter:封装了应用的业务逻辑。 Presenter 处理从视图接收到的用户输入事件,并更改存储在模型中的应用程序状态作为响应。 Presenter 还处理存储在模型中的应用程序状态的更改,并更新视图作为响应。 Presenter 通常同时依赖于 View 和 Model。
如果您在 Android 开发环境中需要有关 MVP 的更多信息,可以在此 post 中找到:MVP and MVC Architectural Patterns in Android
因为您已经了解了 Clean Architecture 的基础知识。以下示例描述了您的 MVP 模式是如何实际实施的。
示例:
interface BaseContract {
interface BaseView {
//Methods for View
void onDoSomething();
}
interface BasePresenter {
void doSomething();
}
}
class BaseMainPresenter implements BaseContract.BasePresenter {
BaseContract.BaseView view;
BaseMainPresenter(BaseContract.BaseView view) {
this.view = view;
}
@Override
public void doSomething() {
if (view != null)
view.onDoSomething();
}
}
class DemoClass implements BaseContract.BaseView {
//Create object of Presenter
/****
* Example :
* BaseMainPresenter baseMainPresenter = new BaseMainPresenter(this);
*/
@Override
public void onDoSomething() {
//Deal with Context here.
}
}
请参阅下面 link 示例实际实施方案并了解有关 Clean Architecture 的更多信息:https://github.com/android10/Android-CleanArchitecture
这里 github
https://github.com/saksham24/Android-Firebase-Mvp-Mvc-Mvvm-chat
我制作了一个包含 3 个具有相同功能但以 3 种不同 android 模式(Mvc、Mvp、Mvvm)
编写的应用程序的存储库
如果我们有一个关于它们的简单好例子,那么理解三种不同的模式就很容易了,所以我做了一个回购协议来为这个开发者社区贡献我的知识。
此外,存储库是使用适当的 java 指南和约定(包括命名和包、模块)编写的,因此寻找此类项目的人也可以查看此存储库。
现在
如果你想知道android Mvp、Mvc、MvvM 之间的区别,请参阅 realm 的解释
https://academy.realm.io/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/
如果你想比较三种模式,请参阅这篇 wonder 完整博客 https://thinkmobiles.com/blog/mvp-vs-mvvm-android-patterns/
Now I read that android uses the MVP design pattern and try to
understand this. The way I understand the MVP principle (in the
android context) is that:
the Model layer are the logic classes
the presenter are the classes that are "linked" to an XML (the activities)
the passive view are the
XML's.
Is this correct?
不完全:对于 Model 层是正确的,但对于 Presenter 则不是。 Presenter 没有链接到 XML,尽管它通过其构造函数引用了 View。 View 是 android.
中的 Activity
/Fragment
您可能想查看 here 以获得 android 的示例 MVP 应用程序。
在 android 中实现 MVP 时需要解决的重要问题是 activity 由于后台进程更新关闭而导致内存泄漏和应用程序崩溃的泄漏 activity。
由于 Presenter 引用了 activity,如果无法对 Presenter 进行垃圾回收,activity 将保留在内存中。
这两个问题都可以通过activity或fragment的生命周期方法来解决,并在这些方法中释放资源,从而防止内存泄漏和应用程序崩溃。
清理资源相关的后台工作可以使用RXJava轻松实现,有关MVP和MVP with RXJava的更多信息,请参见http://www.zoftino.com/android-model-view-presenter-mvp-pattern-example
这是在您的应用程序中实现 MVP 模式的最简单方法 android_mvp_login_sample
我试图了解编写 "clean" Android 应用程序的最佳方法。我发现了一个有趣的 article,他们使用一种 3 层架构。
现在我读到 android 使用 MVP 设计模式并尝试理解这一点。我理解 MVP 原则(在 android 上下文中)的方式是:
- 模型层是逻辑类
- 主持人是 类 "linked" 到 XML(活动)
- 被动观点是XML。
这是正确的吗?
当这是正确的时候,3 层模型完全符合 MVP 原则也是正确的吗 因为:
- 3 层架构中的表示层适合 MVP 的表示层
- 3 层架构的业务和数据层非常适合 MVP 的模型部分?
我希望我的问题很清楚,因为这对我来说是一个复杂的话题。
也许这让我对这个问题有了清晰的认识(思维方式)..。
我想澄清的第一件事是,MVP 或与此相关的任何其他模式并不特定于 Android dev,并且可以应用于任何其他框架。
我想你明白了要点:
- 视图通常由活动和片段实现,并将包含对演示者的引用
- 演示者是视图和模型之间的中间人。从模型中检索数据,returns 它已经格式化为视图,因此除了显示它不需要做任何其他事情。
- 模型可以简单地看作 "data provider"。它可以像你想要的那样复杂,使用内部数据库,大量的类等。
如果您对 Android 应用架构感兴趣,我建议您观看今年在 Android 开发者峰会上发表的演讲。这是我见过的最好的之一
尽管这个问题有答案,但我认为这个答案无论如何都不完整。
MVP 是一个通用概念,可以有许多不同的实现,其中一些有很大的不同。而且,这个概念本身是非常模糊的——当他们说 MVP 时,不同的人可能有不同的概念。最普遍的一种如下图所示:
无论实现如何,MVP 组件的一般定义是:
- 模型:"application state storage" 的抽象。 "state" 的定义及其存储方式是实现细节。模型实现不应依赖于 View 或 Presenter。
- 视图:"user interface" 的抽象。 "user" 是谁以及它如何与视图交互的定义是实现细节。 View 实现不应依赖于 Model 或 Presenter。
- Presenter:封装了应用的业务逻辑。 Presenter 处理从视图接收到的用户输入事件,并更改存储在模型中的应用程序状态作为响应。 Presenter 还处理存储在模型中的应用程序状态的更改,并更新视图作为响应。 Presenter 通常同时依赖于 View 和 Model。
如果您在 Android 开发环境中需要有关 MVP 的更多信息,可以在此 post 中找到:MVP and MVC Architectural Patterns in Android
因为您已经了解了 Clean Architecture 的基础知识。以下示例描述了您的 MVP 模式是如何实际实施的。
示例:
interface BaseContract {
interface BaseView {
//Methods for View
void onDoSomething();
}
interface BasePresenter {
void doSomething();
}
}
class BaseMainPresenter implements BaseContract.BasePresenter {
BaseContract.BaseView view;
BaseMainPresenter(BaseContract.BaseView view) {
this.view = view;
}
@Override
public void doSomething() {
if (view != null)
view.onDoSomething();
}
}
class DemoClass implements BaseContract.BaseView {
//Create object of Presenter
/****
* Example :
* BaseMainPresenter baseMainPresenter = new BaseMainPresenter(this);
*/
@Override
public void onDoSomething() {
//Deal with Context here.
}
}
请参阅下面 link 示例实际实施方案并了解有关 Clean Architecture 的更多信息:https://github.com/android10/Android-CleanArchitecture
这里 github https://github.com/saksham24/Android-Firebase-Mvp-Mvc-Mvvm-chat 我制作了一个包含 3 个具有相同功能但以 3 种不同 android 模式(Mvc、Mvp、Mvvm)
编写的应用程序的存储库如果我们有一个关于它们的简单好例子,那么理解三种不同的模式就很容易了,所以我做了一个回购协议来为这个开发者社区贡献我的知识。 此外,存储库是使用适当的 java 指南和约定(包括命名和包、模块)编写的,因此寻找此类项目的人也可以查看此存储库。
现在
如果你想知道android Mvp、Mvc、MvvM 之间的区别,请参阅 realm 的解释 https://academy.realm.io/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/
如果你想比较三种模式,请参阅这篇 wonder 完整博客 https://thinkmobiles.com/blog/mvp-vs-mvvm-android-patterns/
Now I read that android uses the MVP design pattern and try to understand this. The way I understand the MVP principle (in the android context) is that:
the Model layer are the logic classes
the presenter are the classes that are "linked" to an XML (the activities)
the passive view are the XML's.
Is this correct?
不完全:对于 Model 层是正确的,但对于 Presenter 则不是。 Presenter 没有链接到 XML,尽管它通过其构造函数引用了 View。 View 是 android.
中的Activity
/Fragment
您可能想查看 here 以获得 android 的示例 MVP 应用程序。
在 android 中实现 MVP 时需要解决的重要问题是 activity 由于后台进程更新关闭而导致内存泄漏和应用程序崩溃的泄漏 activity。
由于 Presenter 引用了 activity,如果无法对 Presenter 进行垃圾回收,activity 将保留在内存中。
这两个问题都可以通过activity或fragment的生命周期方法来解决,并在这些方法中释放资源,从而防止内存泄漏和应用程序崩溃。
清理资源相关的后台工作可以使用RXJava轻松实现,有关MVP和MVP with RXJava的更多信息,请参见http://www.zoftino.com/android-model-view-presenter-mvp-pattern-example
这是在您的应用程序中实现 MVP 模式的最简单方法 android_mvp_login_sample