理解Android-architecture (一) todo

2019-07-31  本文已影响0人  一只五彩斑斓的大鹅

由来

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

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

今天我们的分析todo-mvp

项目

QQ20190730-174645@2x.png

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

项目结构

WechatIMG64560.png

思路分析

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

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

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 这个项目中其他结构,并且比较优缺点

上一篇下一篇

猜你喜欢

热点阅读