好文档 - 专业文书写作范文服务资料分享网站

Android开发中的MVP架构

天下 分享 时间: 加入收藏 我要投稿 点赞

Android开发中的MVP架构

最近越来越多的人开始谈论架构。我周围的同事和工程师也是如此。尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建。这篇文章是我通过研究和学习各种文章以及专题讨论所总结出来的。

作者:佚名来源:安卓开发精选|2016-12-08 10:03

收藏 分享

推广 | 令人窒息的奖品等你—2016最权威的全球开发者调研

最近越来越多的人开始谈论架构。我周围的同事和工程师也是如此。尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建。

这篇文章是我通过研究和学习各种文章以及专题讨论所总结出来的,它包括以下几点:

? ? ? ? ?

为什么越来越多的人开始关注架构? 首先,MVP是什么?

哪种架构才是最好的,MVC,MVVM还是MVP? MVP的利与弊

Show me the code!!!代码展示

不幸的,这篇文章将不包括:

? ?

详细生动的代码示例 如何编写测试代码

最后,我将告诉你如何更进一步学习这些专题。

顺便提一下,我于上周在当地的一个研讨会上对MVP架构进行了相关演讲。这篇文章与当时的演讲内容相差无几。

介绍~Activity是上帝类~

首先,让我们思考一下为什么在Android开发中如此迫切地需要一个清晰的软件架构。

该段摘自“代码大全第二版”:

避免创建神类。避免创建无所不知,无所不能的上帝类。如果一个类需要花费时间从其他类中通过Get()和Set()检索数据(也就是说,需要深入业务并且告诉它们如何去做),所以是否应该把这些功能函数更好的组织到其它类而不是上帝类中。(Riel 1996)

上帝类的维护成本很高,你很难理解正在进行的操作,并且难以测试和扩展,这就是为什么要避免创建上帝类的黄金法则。

然而,在Android开发中,如果你不考虑架构的话,Activity类往往会越来越大。这是因为,在Android中,允许View和其它线程共存于Activity内。其实最大的问题莫过于在Activity中同时存在业务逻辑和UI逻辑。这会增加测试和维护的成本。

Activity是上帝

这是为什么需要清晰架构的原因之一。不仅会造成Activity的臃肿,还会引起其他问题,如使Activity和Fragment的生命周期变复杂,以及数据绑定等。

什么是MVP?

MVP代表Model,View和Presenter。

? ? ?

View层负责处理用户事件和视图部分的展示。在Android中,它可能是Activity或者Fragment类。 Model层负责访问数据。数据可以是远端的Server API,本地数据库或者SharedPreference等。 Presenter层是连接(或适配)View和Model的桥梁。

下图是基于MVP架构的模式之一。View是UI线程。Presenter是View与Model之间的适配器。UseCase或者Domain在Model层中,负责从实体获取或载入数据。依赖规则如下:

The Dependency Injection

关键是,高层接口不知道底层接口的细节,或者更准确地说,高层接口不能,不应该,并且必须不了解底层接口的细节,是(面向)抽象的,并且是细节隐藏的。

The higher interfaces do not know about the details of the lower ones

依赖规则?

Uncle Bob的“The Clean Architecture”描述了依赖的规则是什么。

同心圆将软件划分为不同的区域,一般的,随着层级的深入,软件的等级也就越高。外圆是实现机制,内圆是核心策略。

这是上面片文章的摘要:

Enitities:

? ? ?

可以是一个持有方法函数的对象 可以是一组数据结构或方法函数

它并不重要,能在项目中被不同应用程序使用即可

Use Cases

? ? ?

包含特定于应用程序的业务规则

精心编排流入Entity或从Entity流出的数据

指挥Entity直接使用项目范围内的业务规则,从而实现Use Case的目标

Presenters Controllers

? ? ?

将Use Case和Entity中的数据转换成格式最方便的数据 外部系统,如数据库或网页能够方便的使用这些数据 完全包含GUI的MVC架构

External Interfaces, UI, DB

? ?

所有的细节所在

如数据库细节,Web框架细节,等等

MVC,MVP还是MVVM?

那么,哪一个才是最好的呢?哪一个比其他的更优秀呢?我能只选择一个吗?

答案是,NO。

这些模式的动机都是一样的。那就是如何避免复杂混乱的代码,让执行单元测试变得容易,创造高质量应用程序。就这样。

当然,远不止这三种架构模式。而且任何一种模式都不可能是银弹,他们只是架构模式之一,不是解决问题的唯一途径。这些只是方法、手段而不是目的、目标。

利与弊

OK,让我们回到MVP架构上。刚刚我们了解了什么是MVP,讨论了MVP以及其它热门架构,并且介绍了MVC,MVP和MVVM三者间的不同。这是关于MVP架构利与弊的总结: **利

? ? ? ?

可测试(TDD) 可维护(代码复用) 容易Reviewe 信息隐蔽

**弊

? ? ?

冗余的,尤其是小型App开发 (有可能)额外的学习曲线

开始编写代码之前需要时间成本(但是我敢打赌,设计架构是所有项目开发所必需的)

show me the code!!!

Android开发中的MVP架构

Android开发中的MVP架构最近越来越多的人开始谈论架构。我周围的同事和工程师也是如此。尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建。这篇文章是我通过研究和学习各种文章以及专题讨论所总结出来的。作者:佚名来源:安卓开发精选|2016-12-0810:03收藏分享推广|令人
推荐度:
点击下载文档文档为doc格式
1c14d0y9od1j03v4iv5u208bi7808n00a7w
领取福利

微信扫码领取福利

微信扫码分享