Hement:MVP架构设计(一)

  • Hement : 取英文前字母,意思为快乐享受,但愿咱们在敲代码的工程中是快乐享受的意思

image.png

  • 16年的时候我写过一篇博客基于Retorfit+Rxjava+Rxandroid的网络架构MVP网络框架(Retorfit+Rxjava+Rxandroid),使用的是Rxjava1.0,其中的Model 层搭建过于简单,加剧了Presenter的任务,同时也没有很好的解耦,没有使用Dagger2依赖注入框架,Presenter的生命周期没有和Acivity绑定等等问题。故有此文章

一、什么是MVP架构?

  • Model-view-presenter,简称MVP,是计算机软件设计工程中一种对针对MVC模式,再审议后所延伸提出的一种软件设计模式。java

    • MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
    • MVC模式最先由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心在20世纪80年代为程序语言Smalltalk发明的一种软件架构。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,而且使程序某一部分的重复利用成为可能。除此以外,此模式经过对复杂度的简化,使程序结构更加直观。软件系统经过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员能够经过自身的专长分组:
      • 控制器(Controller)- 负责转发请求,对请求进行处理。
      • 视图(View) - 界面设计人员进行图形界面设计。
      • 模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(能够实现具体的功能)。
  • Model-view-presenter (MVP) 是用户界面设计模式的一种,被广范用于便捷自动化单元测试和在呈现逻辑中改良分离关注点(separation of concerns)。android

    • Model 定义用户界面所须要被显示的数据模型,一个模型包含着相关的业务逻辑。
    • View 视图为呈现用户界面的终端,用以表现来自 Model 的数据,和用户命令路由再通过 Presenter 对事件处理后的数据。
    • Presenter 包含着组件的事件处理,负责检索 Model 获取数据,和将获取的数据通过格式转换与 View 进行沟通。

MVP模式.jpg

二、Hement中的MVP架构

  • View(UI层):这是ActivitiesFragments和其余标准Android components组件所在的地方。它负责向用户显示从演示者接收的数据。它还处理用户交互和输入(点击事件等),并在须要时触发Presenter中的正确操做。git

  • Presenter:presenters订阅“DataManager”提供的RxJava可观察对象。他们负责处理订阅生命周期,分析/修改“DataManager”返回的数据,并调用视图中的适当方法来显示数据。程序员

  • Model (Data Layer):它负责检索、保存、缓存和消息数据。它能够与本地数据库和其余数据存储以及restful APIs或第三方SDK通讯。它分为两部分:helpers 和一个DataManagerhelpers 的数量因项目而异,每一个helper都具备很是特定的功能,例如,与API对话或在“SharedPreferences”中保存数据。DataManager使用RxJava操做符组合并转换来自不一样helper 的输出,所以它能够:1)向演示者提供有意义的数据;2)老是一块儿发生的组动做。该层还包含定义数据结构如何的实际模型类。github

Android中的MVP模式.jpg

  • 从右到左看图表:算法

    • Helpers(Model):一组类,每一个类都有很是特定的责任。它们的功能能够从与API或数据库对话到实现一些特定的业务逻辑。每一个项目都有不一样的Helper,但最多见的是:
    • DataBaseHelper:它处理从本地SQLite数据库中插入、更新和检索数据。它的方法返回发出普通Java对象的Rx Observables可观测值。
    • PreferencesHelper:它优先保存和获取来自SharedPreferences的数据,它能够直接返回Observables或纯Java对象。
    • Retrofit services:RetrofitRestful APIs进行通讯的接口,每一个不一样的API都有本身的Retrofit服务。它们返回Rx Observables
    • Data Manager (Model):它是体系结构的一个关键部分。它保留对每一个Helpers类的引用,并使用它们来知足来自presenters的请求。
    • Presenters:订阅DataManager提供的可观察对象,并处理数据,以便在视图中调用正确的方法。
    • Activities,Fragments,ViewGroups(View):实现演示者能够调用的一组方法的标准Android组件。它们还处理用户交互,例如单击并相应地经过调用Presenter中的适当方法进行操做。这些组件还实现与框架相关的任务,好比管理Android生命周期、填充视图等。
    • Event Bus:它容许向视图组件通知模型中发生的某些类型的事件。一般,‘DataManager’发布事件,而后这些事件能够被活动和片断订阅。事件总线用于与仅一个屏幕无关而且具备广播性质的很是特定的操做例如,用户已经退出登陆.
  • 未完待续。。。。。数据库

  • GitHub地址:Hement,持续更新中设计模式

  • 最后说明几点缓存

    • tks wiki MVC
    • 我写文章不多说本身的观点,这是第一次代表本身的观点,项目自己不大的状况,也没有达到某种量级的时候,不要使用组件化和插件化,构建时间和找问题的时间太多了,反而浪费开发的时间,自我感受,组件化就是大厂玩的东西,我不是说很差,而是对于咱们大多数的公司,是彻底用不上组件化的,及时用的上,搞明白轮子的缘由都要花费好多的时间和经历,可是本身的项目必定要清晰,至少本身使用起来不那么的讨厌!
    • Event Bus 可是这个事件总线有必定局限性,若是这个不存在生命周期的话,是不可以接受到的这个事件。例如:你不能发一个事件,让某个没有打开的View调动通知栏。
    • tks Model-view-presenter
    • android-boilerplate
相关文章
相关标签/搜索