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
    评论
Android开发中,MVPMVVM是两种常用的架构模式。 MVP(Model-View-Presenter)模式中,View负责展示数据和处理用户交互,Model负责数据的获取和处理,Presenter作为中间人连接View和Model,负责处理业务逻辑。MVP模式通过Presenter来解决View和Model的直接通信,提高了代码的复用性、可拓展性和降低了耦合度。但是,MVP模式会增加很多接口和实现类,代码量相对较大,适用于中小型项目,不太适合大型项目。\[2\] MVVM(Model-View-ViewModel)模式是在MVP的基础上进一步发展和规范的。MVVM模式中,ViewModel负责处理业务逻辑和数据的获取,View负责展示数据和处理用户交互,Model负责数据的存储和处理。MVVM模式引入了Data Binding的概念,通过Binding来实现View接口的实现方法,使代码更加优雅简洁。MVVM模式相对于MVP模式更加灵活和方便测试。\[3\] 所以,MVPMVVM都是为了解决MVC模式中代码臃肿、耦合度高等问题而提出的。MVP通过Presenter来解决View和Model的直接通信,而MVVM通过Data Binding来实现View接口的实现方法,使代码更加优雅简洁。在Android开发中,根据项目的规模和需求选择适合的架构模式是很重要的。 #### 引用[.reference_title] - *1* [一篇文章讲清楚Android中的MVC、MVPMVVM架构 (附实现代码)](https://blog.csdn.net/bugyinyin/article/details/128932821)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Android的三种开发模式 mvc mvp mvvm](https://blog.csdn.net/qq_43649223/article/details/120746596)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值