此篇博文将简略介绍:
· Andorid MVP 抽象概念
· 基于 MVP 实现的简单RSS阅读器项目简单构建
· MVP 的优势
一 。 What is MVP
如果没有浏览过相关文献,大部分程序员第一次的理解肯定是 Most-Valuable-Player (NBA的最佳球员奖)。
这也不算全部偏义,在目前 MVVM模式 未成熟的今天,MVP模式 比 MVC模式,在项目需要进行重构,添加功能,单元测试等时, 更能满足大型项目的需求。可以说 MVP 在一定层面上,是当今开发模式中的 “最佳球员”。
现在让我们来真正了解下 MVP。
MVP 是英文 Model - View - Presenter 的缩写,由 MVC 模式演变而来。 在 MVP 中,(不同于 MVC) Model 与 View 不能直接交互, presenter扮演重要中间角色 , 可与 View 和 Model 直接交互。如下图所示。 (图片摘自 Wiki 百科)
在实际开发时,MVP 会更多依赖于接口的继承机制,View 与 Presenter 的交互和 Dependency Inject (依赖注入模式)十分相似,通过单参构造器传递View到Presenter中,实现Presenter对View的控制,Model 与 Presenter 的交互与MVC中一致,(大部分)通过在 Presenter / Controller 中创建 POJO 生成 Model 。
重点是 MVP 中业务逻辑代码都在 Presenter 中实现。
二 。"Codes" the MVP
先简单了解下RssReader的项目逻辑。
--- model.RssItem 供创建指定 XML 中的数据模型, modele.RssFeed 生成 ItemList 存储多个 Item, 且可回馈数据给 Presenter。
--- presenter.utils.* 基于 SAX 解析 XML 文件的类,不作详解。
--- presenter.Preseneter 基于IPresenter接口实现四个 Methods。 Methods实现简单的逻辑 : 获取指定XML文件中的内容显示到ListView + 点击ListViewItem 跳转到详细内容界面。
--- view.* 视图控制于功能逻辑调。
再简单粗暴先上个文件树图片。
可以观察到 presenter 和 view 中的类都实现了相应的接口。这使得 presenter 中的逻辑,view 中的视图界面更加简明清晰。
由于此项目四肢比较发达,接口需实现的方法只有少许。
让我们先从 presenter 入手看下代码。
正如上文所言,我们可以观察到 View 中的 MainActivity 类和 ShowDescription 类通过 Constructor 传递给 Presenter, 且 Presenter 实现了其接口的四个 methods。
现在问题来了,如果我们需要增添一项功能 -- DeleteItem(), 这时我们只需要在 IPresenter 接口中添加 pDeleteListItem(), 再在 Presenter 中实现,再调用 Activity 类对视图进行控制。See? Presenter 在清晰的代码组织下,对 View 的控制功能已经暴露了!
再让我们浏览下MainActivity。
稍微注意下
private Presenter presenter; //创建
...
presenter = new Presenter(this); //注入
...
rssFeed = presenter.getRssFeed(rssFeed, RSS_URL); //调用
MVP代码组织方式及机构差不多就是如此。 (仅供新手:有兴趣看具体代码的可以访问下个人github : https://github.com/WindyIT)
三。 MVP's advantages
· 优化代码结构, 使代码更具可读性,更简洁
· 视图逻辑与控制逻辑独立
· (引入接口)方便单元测试
· 降低内存泄漏风险 (来自某某大神)
End ...
参考链接:
http://valokafor.com/learn-android-mvp-pattern-example/
http://www.open-open.com/lib/view/open1446377609317.html
private Presenter presenter;