今天分享一下自己对页面业务逻辑分层的心得,在没有LifeCycle组件的时候,一直都是用自己总结的Delegate架构,即使出现LifeCycle组件之后,虽然有部分思想重叠,但是Delegate架构加入了更多的生命周期代理和代理事件。 

 

分析:

在APP开发中,一个复杂一点的页面业务逻辑一般都不会少于1000行,想起来如果把这1000行代码写到一个Activity中,那后期各种维护问题就会明显出现。

 

那么怎么办,如果合理的把不同业务逻辑的代码进行有效的分类,分别封装到各自单独的类中,明显能提升代码的结构质量。

 

但是这样有一个问题,就是一些业务逻辑需要通知令一部分业务逻辑,让其处理相关事件,例如处理推送的业务逻辑收到推送了,此时要通知处理界面列表展示的业务逻辑去更新数据。

 

经过实践,对应页面的业务逻辑,进行合理的分层封装,加上合理的事件中心模式,能大大提高页面业务逻辑的结构质量,使得开发的可维护性提高。

 

核心:

(1)数据中心

针对每一个页面,页面分层架构都会提供一个数据中心,简单来说就是把需要共享的数据集中放到一起,一般我会放到Activity中(直接把Activity当成数据中心),数据中心就是定义界面用到的数据模型和事件定义。


现在看看下图的简单页面:

Android层级选择款 android分层架构_数据

 

 

 

如果数据中心需要定义,则会定义如下的数据:

// 模型:ListView需要展示的数据
1.List<String> items;
// 事件:当获取到新的数据时
2.int EVENT_LOAD_NEW_DATA = 1;
// 事件:请求拉取数据
3.int EVENT_REQUEST_LOAD_DATA = 2;

现在分析一下,当按钮点击时去获取后台数据,获取完毕之后,将数据添加到items变量,然后发送EVENT_LOAD_NEW_DATA的事件去通知其他的业务逻辑模块去刷新数据。


(2)代理模块

上面我们说过,每个页面都有很多业务逻辑模块,在上面的图中,我们分析后会得出这样几个业务逻辑模块:控件绑定模块,拉取数据模块、ListView展示模块,现在我们一步一步分析。

     2.1 控件绑定模块:该模块代理Activity的所有生命周期方法,在onCreate()中获取控件引用,并设置点击事件,点击时发送请求加载新数据的事件。

     2.2 拉取数据模块:当收到请求加载新数据的事件,此模块就会进行数据请求,获取完数据之后,添加到数据中心的items,然后发送获取到新的数据的事件。

     2.3 ListView展示模块:该模块代理Activity的所有生命周期方法,在onCreate()中设置Adapter并绑定数据中的items变量(一开始大小为0),当收到获取到新的数据的事件时,刷新Adapter进行数据重新展示。

 

(3)过程步骤

上面我们以及简单说了一下数据中心、代理模块的基本概念,那么问题就来了,如何简单快速的实现这种页面架构呢。

 

最快速的实践方案就是利用:LifyCycle组件,每个代理模块就是一个LifecycleObserver,这样每个模块处理各自的业务逻辑,同事如果有需要事件的功能时,可以自己写一个简单的事件中心库,也可以使用事件总线的库。