美文网首页
理解Android-architecture (一) todo

理解Android-architecture (一) todo

作者: 一只五彩斑斓的大鹅 | 来源:发表于2019-07-31 14:21 被阅读0次

    由来

    由于最近一直对框架进行研究,在github 上发现Google 的官方框架Android-architecture这相当于Google官方为开发者们提供的Android app框架 设计指南

    该项目展示了不同的工具和各种模式的框架,我们来逐一进行分析这是我们共同进步的过程

    今天我们的分析todo-mvp

    项目

    QQ20190730-174645@2x.png

    android-architecture一系列都实现了一个todo-list 的demo

    项目结构

    WechatIMG64560.png
    • addedittask 用于创建或编辑任务。
    • data 封装的数据源
    • statistics 用于进行任务统计
    • taskdetail 用于读取或删除任务
    • tasks 显示与任务相关的统计信息。
    • util 工具类
    • BasePresenter persenter用来连接view 和 model 的桥梁,用来处理逻辑分析
    • BaseView view的基类

    思路分析

    MVP模式是 Model View Presenter 其中view层和model层是没有关联的他们之间是通过presenter层来进行桥梁的构建 与MVC相比不会发生在Activity中即实现view 和controller 层造成代码的冗余不便于理解

    在todo-mvp这个项目中每一个模块都是通过mvp来进行构建的这也是一个标准的mvp模式

    • Model 层是对数据的处理在这个项目中是data的封装
    • Presenter 层是负责view 和model之间的桥梁,还负责进行逻辑处理
    • View 层负责页面的逻辑
    image
    上图为官方给出的图片,很好的分析了项目的结构

    代码分析

    在mvp模式中每个模块都是mvp结构我们通过首页模块进行分析其他模块是相同的

    TaskContract 类

    public interface TasksContract {
    
        interface View extends BaseView<Presenter> {
    
            void setLoadingIndicator(boolean active);
    
            void showTasks(List<Task> tasks);
    
            void showAddTask();
    
            void showTaskDetailsUi(String taskId);
    
            void showTaskMarkedComplete();
    
            void showTaskMarkedActive();
    
            void showCompletedTasksCleared();
    
            void showLoadingTasksError();
    
            void showNoTasks();
    
            void showActiveFilterLabel();
    
            void showCompletedFilterLabel();
    
            void showAllFilterLabel();
    
            void showNoActiveTasks();
    
            void showNoCompletedTasks();
    
            void showSuccessfullySavedMessage();
    
            boolean isActive();
    
            void showFilteringPopUpMenu();
        }
    
        interface Presenter extends BasePresenter {
    
            void result(int requestCode, int resultCode);
    
            void loadTasks(boolean forceUpdate);
    
            void addNewTask();
    
            void openTaskDetails(@NonNull Task requestedTask);
    
            void completeTask(@NonNull Task completedTask);
    
            void activateTask(@NonNull Task activeTask);
    
            void clearCompletedTasks();
    
            void setFiltering(TasksFilterType requestType);
    
            TasksFilterType getFiltering();
        }
    }
    

    这个类相当于Presenter 和view 之间的协议 通过接口对view层和presenter层来进行解耦

    BaseView代码

    public interface BaseView<T> {
    
        void setPresenter(T presenter);
    
    }
    

    setpresenter() 方法是将页面与presenter进行关联

    在页面中代码是这样写的 详情见 TasksFragment

     @Override
        public void setPresenter(@NonNull TasksContract.Presenter presenter) {
            mPresenter = checkNotNull(presenter);
        }
    

    在view层是通过setPresenter方法拿到的实例

    BasePresenter

    public interface BasePresenter {
    
        void start();
    
    }
    

    只有一个start 方法 这个方法是通过启动进行数据加载进行的调用

    TasksPresenter

    
    public TasksPresenter(@NonNull TasksRepository tasksRepository, @NonNull TasksContract.View tasksView) {
            mTasksRepository = checkNotNull(tasksRepository, "tasksRepository cannot be null");
            mTasksView = checkNotNull(tasksView, "tasksView cannot be null!");
    
            mTasksView.setPresenter(this);
        }
    

    在Taskpresenter 中我们通过构造方法就可以看出通过构造将view层和model层传入进来并且通过setPresenter()方法将Presenter的实例传入,让view层方便调用

    总结

    todo-mvp 是一个非常基础的MVP结构也是最简单的,经典的MVP构造,在这里就不进行老生常谈了我们接下来会继续分析 Android-architecture 这个项目中其他结构,并且比较优缺点

    相关文章

      网友评论

          本文标题:理解Android-architecture (一) todo

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