此篇博文将简略介绍:

       · 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 会更多依赖于接口的继承机制,ViewPresenter 的交互和 Dependency Inject (依赖注入模式)十分相似,通过单参构造器传递View到Presenter中,实现Presenter对View的控制,ModelPresenter 的交互与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;
posted on 2017-03-16 13:01  Elapsed_Time  阅读(215)  评论(0编辑  收藏  举报