关于软件架构设计的一些思考--通用架构设计模式
2014-09-16 11:44
821 查看
最近在着手设计一个服务发布,治理的框架,参考了几个主流框架的代码,比如阿里的Dubbo,传输层的Netty,容器层的Tomcat等等,有一些体会。
经典的《面向对象分析与设计》一书中阐述了为什么设计是按层次划分的,种种好处自己去翻书,总结这么多框架,有一些架构设计的基本模式可以抓住。
通用的设计,尤其是大型的框架可以分为4层:接口层,抽象层,流程实现与适配层,具体实现层。
接口层定义了整个框架所具备的功能,最好都用接口实现,不要用抽象类。接口的扩展性优于抽象类。Thrift采用了抽象类来设计顶层的功能,后期想扩展其实挺难的。
关于接口层的设计有一些要点:
1. 接口的粒度要小,参考单一职责原则
2. 用一个较大的接口适配多个小接口,而不要设计一个大接口。小接口的扩展性优于大接口
3. 接口的设计只需要考虑要具备的功能,不需要考虑类的属性,如何实现等等,这些在抽象层和实现层扩展
抽象层定义了实现接口的抽象类,都用抽象类实现,主要的功能有:
1. 给接口提供默认实现
2. 提供新的抽象方法扩展接口
3. 给子类提供公共的属性,方法
4. 比如定义调用的基本流程,这个在设计大型框架,底层采用第三方实现的时候尤其重要。参考模板模式
流程实现与适配层,这层采用普通类实现,继承抽象层,主要的功能有:
1. 实现抽象层和接口层定义的抽象方法
2. 定义框架调用的具体流程
3. 如果底层采用第三方框架,那么需要做适配和装饰层,参考适配器模式和装饰器模式
具体实现层,这层采用普通类实现,主要是实现具体的功能,但是不要参与到框架调用的流程。
这个4层结构是一个可扩展的,健壮的设计,接口层定义功能,抽象层和流程实现与适配层定义了框架调用的流程,具体实现层是可插拔的,可以采用多种实现。
实际的设计可以根据框架要实现的功能进行裁剪,比如不会有多种实现,就可以把3,4层合并。如果是像Dubbo这种底层支持多种传输层和协议层的框架,就需要完整的4层结构,并且需要好好设计抽象层和流程层,因为框架具体的流转是在这两层,只是涉及到底层时,才会调用具体的第三方实现。
经典的《面向对象分析与设计》一书中阐述了为什么设计是按层次划分的,种种好处自己去翻书,总结这么多框架,有一些架构设计的基本模式可以抓住。
通用的设计,尤其是大型的框架可以分为4层:接口层,抽象层,流程实现与适配层,具体实现层。
接口层定义了整个框架所具备的功能,最好都用接口实现,不要用抽象类。接口的扩展性优于抽象类。Thrift采用了抽象类来设计顶层的功能,后期想扩展其实挺难的。
关于接口层的设计有一些要点:
1. 接口的粒度要小,参考单一职责原则
2. 用一个较大的接口适配多个小接口,而不要设计一个大接口。小接口的扩展性优于大接口
3. 接口的设计只需要考虑要具备的功能,不需要考虑类的属性,如何实现等等,这些在抽象层和实现层扩展
抽象层定义了实现接口的抽象类,都用抽象类实现,主要的功能有:
1. 给接口提供默认实现
2. 提供新的抽象方法扩展接口
3. 给子类提供公共的属性,方法
4. 比如定义调用的基本流程,这个在设计大型框架,底层采用第三方实现的时候尤其重要。参考模板模式
流程实现与适配层,这层采用普通类实现,继承抽象层,主要的功能有:
1. 实现抽象层和接口层定义的抽象方法
2. 定义框架调用的具体流程
3. 如果底层采用第三方框架,那么需要做适配和装饰层,参考适配器模式和装饰器模式
具体实现层,这层采用普通类实现,主要是实现具体的功能,但是不要参与到框架调用的流程。
这个4层结构是一个可扩展的,健壮的设计,接口层定义功能,抽象层和流程实现与适配层定义了框架调用的流程,具体实现层是可插拔的,可以采用多种实现。
实际的设计可以根据框架要实现的功能进行裁剪,比如不会有多种实现,就可以把3,4层合并。如果是像Dubbo这种底层支持多种传输层和协议层的框架,就需要完整的4层结构,并且需要好好设计抽象层和流程层,因为框架具体的流转是在这两层,只是涉及到底层时,才会调用具体的第三方实现。
相关文章推荐
- 关于海量用户访问的通用技术架构的一些思考
- 十问 TiDB :关于架构设计的一些思考
- 关于海量用户访问的通用技术架构的一些思考
- 关于设计模式的一些看法与思考
- 关于软件开发和模块接口设计之一些思考
- 关于海量用户访问的通用技术架构的一些思考
- 《软件架构与设计模式》关于 抽象工厂模式 的一个小例子
- 关于软件设计分层的一些思考
- 关于海量用户访问的通用技术架构的一些思考
- 系统架构模式&&通用职责分配软件模式(GRASP)&&代码设计模式
- 关于软件架构、设计模式和应用框架的一点看法
- 谈谈对一些软件架构设计箴言的理解 对软件的过早地优化是万恶的根源 反设计模式案例简介
- 关于软件系统架构设计的一些新思想
- 关于面向构件和EOS的一些思考-软件开发和传统行业应该怎么对比
- 关于软件开发团队的一些思考
- 关于软件开发团队的一些思考
- 关于国产科学(计算)软件的一些思考
- 软件架构模式和设计模式
- 关于软件开发团队的一些思考
- 整理几个关于设计模式、架构的博客专栏和文章