美文网首页MVP 与自动化测试
MVP GoogleSample——todo App(二)

MVP GoogleSample——todo App(二)

作者: vvweilong | 来源:发表于2017-04-30 13:21 被阅读0次

    笔记: 昨天弄清楚 项目的架构,今天来看看具体细节是怎么实现的吧。

    我们以“添加一个新的任务” 这个动作,作为我们研究的主线流程。

    APP 上的我们要执行的操作是:点击 floatButton添加 →  输入 task 名称  →  点击 floatbutton 完成。所以首先我们找到 floatButton 的 onClick()

    floatButton 点击监听

    可以看到,作为 view 的 TasksFragment 持有了一个作为 presenter 的对象,在用户进行点击操作的时候 直接调用 presenter 的方法,将用户的 UI 事件转换成了具体的逻辑任务。然后我们跟随事件,来到 presenter 中看看下面的操作。(注:这里为了解耦 presenter 具体类对象是实现了 presenter 的操作接口)

    Presenter 定义

    我们在 TaskActivity 中找到了 传入的 presenter 实现类 ——TasksPresenter 

    两个重点

    1、TasksPresenter 实现了 TasksContract.Presenter 接口 用于实现TasksPresenter 与 Fragment 的解耦。

    2、通过 TaskView 接口的方法 使Fragment 持有了它本身(this)对象。

    下面我们找到 addnewTask()方法

    addnewtask

    看到.....额.....通过 mTasksView 的接口方法又回调给了 view层 (当前的 view 层 就是 TasksFragment),好吧 我们再回去。(其实如果 app 复杂一些在这里会执行一些操作,比如获取未编辑完成的 task,或者加载一些个性化的东西 )

    找到 showAddTask()方法 看到,在这里跳转到了一个新的 activity 中来执行对这个新 task 的编辑操作。好像 intent 也没有带什么数据过去。就这么直接去了...

    AddEditTaskActivity

    AddEditTaskActivity 与 TasksActivity 很类似。 这里出现了另一个 MVP 结构单元 

    Injection.provideTasksRepository   ——   AddEditTaskFragment   —— AddEditTaskPresenter

    我们执行的动作 也只有一个,就是 点击 floatbutton 来保存我们新创建的 task

    还是找到 floatbutton 的 onClick 监听

    执行了 presenter 的 saveTask 操作 并传入了 两个 Title 与 description 两个 String 参数。

    saveTask()

    saveTask 的具体操作: 首先检查是否是新建任务 

    isNewTask()

    咦? 这 mTaskId 是什么鬼?  哈哈,我们回去 AddEditTaskActivity 中看看 Presenter 的定义部分

    记得我们前面说了 , 在执行跳转的 Intent 什么都没有传过来,所以当我们在创建一个新的 task 时 这个 taskId 一定是空的。那么接下来就会执行 creatTask()了

    如果新创建的 task 是有效的 首先通过 TasksRepository 来将 task 保存到数据中,这里是 presenter 对 model 进行了调用操作 并且是由 presenter 持有 model 的对象。

    saveTask()

    saveTask 的操作 ,分别  task 保存到 远端  本地 以及  缓存中。保存完成后 执行了AddTaskView 接口的 showTaskList 操作 通知 UI(当前的 view 是 AddEditTaskFragment)进行先一步操作

    返回上一步 将结果交给 presenter 处理 处理完成通知 view 

    好,一整套添加新 task 的流程走完。我们总结一下 各部分的职责吧

    架构图

    首先   view 层 与 presenter 层 是相互持有,这样来达到交流的作用,view 层负责接收和展示。

    然后 presenter 层与 Respository层(或者 Model)为单向持有,就是说只能是由 presenter 来控制从 model 层得到什么,或者给 model 层什么,而 model 只能服从。presenter 来负责怎么处理问题。

    而 model 层就是执行者,处理有 persenter 将问题细化后的各项任务,并通过回调 来告知 presenter 执行结果。

    相关文章

      网友评论

        本文标题:MVP GoogleSample——todo App(二)

        本文链接:https://www.haomeiwen.com/subject/svtxtxtx.html