Android MVP MVVM框架梳理 (二)

Android MVP MVVM框架梳理 (二)

Android MVP框架梳理 梳理下Google推荐的MVP MVVM Demo
源码Git地址

  • todo‑mvp
  • todo‑mvp‑clean
  • todo‑mvp‑dagger
  • todo‑mvp‑rxjava
  • todo‑mvvm‑databinding
  • todo‑mvvm‑live

todo‑mvp‑clean

todo‑mvp‑clean源码Git地址

todo‑mvp‑clean与todo‑mvp对比

  1. todo‑mvp‑clean在Presenter和TasksDataSource 之间加入了Domail Layout层 该层中可以减少Presenter的代码 使逻辑更清晰
  2. todo‑mvp‑clean加入了UseCase和UseCaseHandler的机制 在非UI线程进行逻辑操作 在UI线程进行界面刷新

todo‑mvp‑clean结构图

这里写图片描述

todo‑mvp‑clean逻辑梳理

todo‑mvp‑clean与todo‑mvp只是在Presenter和TasksDataSource之间逻辑处理有了变化 只梳理这部分的流程

    /**
     * Presenter层调用UseCaseHandler去执行逻辑处理
     * 处理完回调上层结果 通知界面刷新
     *
     * @param title
     * @param description
     */
    private void createTask(String title, String description) {
        Task newTask = new Task(title, description);
        if (newTask.isEmpty()) {
            mAddTaskView.showEmptyTaskError();
        } else {
            mUseCaseHandler.execute(mSaveTask, new SaveTask.RequestValues(newTask),
                    new UseCase.UseCaseCallback<SaveTask.ResponseValue>() {
                        @Override
                        public void onSuccess(SaveTask.ResponseValue response) {
                            mAddTaskView.showTasksList();
                        }

                        @Override
                        public void onError() {
                            showSaveError();
                        }
                    });
        }
    }
    /**
     * 每个Presenter对应一个UseCaseHandler
     * UseCaseHandler中进行具体的逻辑处理
     *
     * @param useCase
     * @param values
     * @param callback
     * @param <T>
     * @param <R>
     */
    public <T extends UseCase.RequestValues, R extends UseCase.ResponseValue> void execute(
            final UseCase<T, R> useCase, T values, UseCase.UseCaseCallback<R> callback) {
        //设置请求过程中需要的参数
        useCase.setRequestValues(values);
        //设置请求完成后的回调
        useCase.setUseCaseCallback(new UiCallbackWrapper(callback, this));

        EspressoIdlingResource.increment();

        //逻辑处理放在非UI线程
        mUseCaseScheduler.execute(new Runnable() {
            @Override
            public void run() {
                useCase.run();
                if (!EspressoIdlingResource.getIdlingResource().isIdleNow()) {
                    EspressoIdlingResource.decrement();
                }
            }
        });
    }

    /**
     * 具体的业务处理
     * GetTasks.java
     *
     * @param values 上层传来的参数
     */
    @Override
    protected void executeUseCase(final RequestValues values) {
        if (values.isForceUpdate()) {
            mTasksRepository.refreshTasks();
        }

        //此逻辑在非UI线程执行
        //并对数据仓储设置回调
        mTasksRepository.getTasks(new TasksDataSource.LoadTasksCallback() {
            @Override
            public void onTasksLoaded(List<Task> tasks) {
                TasksFilterType currentFiltering = values.getCurrentFiltering();
                TaskFilter taskFilter = mFilterFactory.create(currentFiltering);

                List<Task> tasksFiltered = taskFilter.filter(tasks);
                ResponseValue responseValue = new ResponseValue(tasksFiltered);
                //处理结果回调上层进行处理( mAddTaskView.showTasksList();)
                getUseCaseCallback().onSuccess(responseValue);
            }

            @Override
            public void onDataNotAvailable() {
                处理结果回调上层进行处理( showSaveError();)
                getUseCaseCallback().onError();
            }
        });
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值