首先,不了解 Clean 架构的可以看看这个,不过也没关系,阅读本文后你也许会对Clean架构思想有一个认识。

对比MVP项目的结构图,我们发现不同之处是新增的这个Domain Layer这层,来隔离Presentation Layer和Data Layer,负责了所有的业务逻辑交互,那么本文就主要来分析这层的设计和实现。

这里写图片描述

我们仍然以Sample中详情界面(功能)来进行分析,下图展示了在 TaskDetailFragment 中点击删除按钮,然后所经历的逻辑交互以及最后完成了界面更新。

这里写图片描述

1、在 TaskDetailFragment 中点击菜单,调用 Presenter 的 deleteTask() 方法:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_delete:
                mPresenter.deleteTask();
                return true;
        }
        return false;
    }

2、Presenter 的 deleteTask() 方法,是使用UseCaseHandler类中的 UseCaseScheduler 对象来执行任务,并处理结果和异常。

// TaskDetailPresenter 中deleteTask() 方法
@Override
public void deleteTask() {
mUseCaseHandler.execute(mDeleteTask, new DeleteTask.RequestValues(mTaskId),
new UseCase.UseCaseCallback

 @Override
    protected void executeUseCase(final RequestValues values) {
        mTasksRepository.deleteTask(values.getTaskId());
        getUseCaseCallback().onSuccess(new ResponseValue());
    }

从以上的分析流程中可以看出,原本位于 Presenter 中的业务逻辑转移到了 UseCaseHandler 中,UseCaseHandler 使用 UseCaseScheduler 来切换工作线程和UI线程,使用 UseCase 来处理每个 Task 的逻辑。其类图如下:

这里写图片描述

总结

与MVP最大的不同是加入了 Domain layer 和 use cases,把原本位于 Presenter 中臃肿的逻辑代码移到了 Domain layer 中,减轻了 Presenter 的体量,而 use cases 定义了每个业务的具体操作,细化了业务粒度,也有效提高了代码的重用性。
使用 UseCaseScheduler 来提供线程池执行异步任务,并可以切换工作线程和UI线程。

转载请标明出处:http://www.jianshu.com/p/7ae3095f2cb5

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐