Android展现层与业务层的数据解耦

来源:互联网 发布:ipv6无网络权限 编辑:程序博客网 时间:2024/06/04 18:12



转载地址:

http://blog.csdn.net/bingsiju123123/article/details/53082586


三层架构是一个非常经典的架构模式,根据系统的职责不同,将系统分成了展现层(主要用来UI展示以及触发事件源)、业务层(主要用来实现UI事件源触发的逻辑)、数据访问层(主要用来进行数据访问),并配合数模型据进行数据传递。三层架构对于大型团队大型项目的并行开发远远不能成为支撑点。故又将三层架构进行细化,分为五层架构。毕竟分层是划分子系统的必要策略之一。下图是五层架构模型:

事无巨细,无论怎么分层,各个层之间数据解耦始终是首要问题。解耦的目的就是为了降低各个模块的依赖,提高代码的可重复利用。下面本文就结合三层架构模式来重点介绍各个层之间的解耦。就用简单的注册流程说明下吧。

这里通过RegisterFragment,调用了RegisterServiceRegisterNotifyService两个类,通过类图可以看得出,展现层对业务层(本文XxxxService就是我们的业务层)直接采用了直接调用的方式。在面向对象的设计中,我们强调的是面向接口编程,下图是加上接口之后的UML模式图:


结合以上UML模式图,再加上工厂方法或者依赖管理的框架spring,就可以实现展现层和业务层的解耦了,我们随时针对RegisterServiceRegisterNotifyService进行替换,这既符合针对接口编程,也符合开闭原则,更符合里氏替换。


好,问题来了,我不想更改当前的两个逻辑,想添加第三个逻辑。是不是得改展现层的类了?其实根本不需要,我们选择用观察者模式来解决新添加的逻辑,实现三层架构的真正解耦(这里主要指展现层和业务层的耦合)。


以下是实现展现层与业务层解耦的思路:


我们把RegisterFragment作为事件源,把注册的用户名和注册的密码作为消息发送出去,注册过的Service可以处理消息,也就是通过消息对展现层和业务层进行解耦。以下是改善之后的UML模式图;





RegisterFragment继承了BaseEventDispath(抽象类,主要用来进行BaseListener事件分发)RegisterServiceRegisterNotifyService分别继承了BaseListener接口,成为了监听者。具体怎么解耦的呢?


1BaseEventDispatch抽象类,该抽象类实现了事件源的注册、取消注册、通知方法;


2BaseEventDispatch抽象类的子类RegisterFragment,该类提供了两个回调方法;注册成功和注册失败的回调;



3BaseListener接口的方法体;



4、实现了BaseListener接口的RegisterService类实现;



5、实现了BaseListener接口的RegisterNotifyService类实现;




到此,我们还需要一个类,把BaseListener类注册到事件源,事件源也就是展现层,之后就可以发消息给业务层了,这里我们暂且把这个类放到展现层。这是当我们再想添加逻辑,只需要实现BaseListener接口,并且修改一下下面这个调用方法,把新添加的类注册到RegisterFragment上就可以了。


 


以下是调用方法及输出:


至此,展现层与业务层的解耦已讲解完毕,需要Demo的童鞋请留下联系方式或者关注我的公众号,IT软件人,获取更多技术资讯。



0 0
原创粉丝点击