当前位置: 首页 > news >正文

软件架构设计之常用架构模式

1.分层架构:分层架构是使用最多的架构模式,通过分层使各个层的职责更加明确,通过定义的接口使各层之间通讯,上层使用下层提供的服务。分层分为:严格意义上的分层,一般意义的分层。严格意义的分层是n+1层使用n层的服务。而一般意义的分层是上层能够使用它下边所有层的服务。领域驱动设计的分层定义:UI层,UI控制层,服务层,领域层,基础设施层。

  2.MVC架构:MVC架构相信做软件的都听说,主要是为了让软件的各部分松耦合,现在好多根据MVC思想构建的框架如:Spring MVC,Structs2,ASP.Net MVC等。MVC是Model View Control的简写,他的原理是什么那,比如拿web来举例吧。当一个web请求来了以后View接收这个请求,随即把请求转发给Control进行处理,Control通过分析请求的类型等信息决定加载哪些Model,当Model加载完成以后Control通知Model已经加载完毕,这是View就去读取Model数据进行显示自己。MVC还有一个衍生架构叫MVP,因为MVC的View跟Control和Model都有耦合关系所以为了解除View和Model之间的关系,View不直接读取Model而是通过Control来转发View需要的数据。还有一个衍生架构叫MVVP,就是增加了一个ViewControl的层,用来辅助视图的生成,这样View的功能更加简单只是用来显示不包含其它的功能,而且有了ViewControl使多视图或替换视图很方便。MVP微软的WPF就是使用这种架构。

  3.微内核架构:微内核架构就是做一个稳定通用的内核,也就是给软件设计一个强劲的心脏。如果需要更多功能通过在内核外部再封装一层对软件进行扩充,微内核提供基本的接口供外部调用,这些接口一定要通用,并且提供事件的机制告诉外部内部发生的事件,这样就是内核与外部完全隔离。微软操作系统就是按照微内核设计的。我之前做了一个Gis组件当初思想也是这个样子的,但是当初不知道还有微内核架构,有了对微内核的深入理解会进一步完善那个Gis组件。

  4.元模型架构:元模型架构就是有元数据支撑的架构,现在使用的也很广泛,比如:ORM,.Net 类的设计等都是元数据支持的。元数据有自我描述性比如ORM会描述类对应数据库中的表属性对应数据库里的字段,还有IOC类中的引用需要注入哪个类等等都会通过元数据的形式实现。IOC框架通过解析元数据信息使注入和被注入类只通过接口依赖,这样替换注入类很方便。元数据架构是很灵活的架构,可发展空间非常大,元数据架构会经常用反射技术或者动态代码生成技术。我之前做了一个ORM就是用到的元数据架构,我还想给ORM添加依赖注入面向切面编程等特性都很方便的。

  5.管道-过滤器架构:这个模式就像是工厂的流水线,生产原料通过流水线经过很多环节进行处理变成产品。软件也是一样的,网络OSI7层就是消息通过管道内部的很多步处理对消息进行加工过滤转换。再举一个例子,两家企业需要信息交换,但是企业的信息格式和描述规则都不相同,如果想达到交换必须经过处理,所以我们就得用管道过滤器模式,通过管道过滤器模式信息进入管道我们会在管道里添加各种处理功能,比如:数据验证,信息加密,信息解密,信息压缩,信息解压缩,格式转换等功能,对消息进行处理以符合我们要求的消息格式,而且如果需要添加一个新的处理只要把处理的功能插入到管道中即可,这样达到最大的灵活性。应用此模式的有:ASP.net请求模型,Spring 对象构造,Structs 数据请求等。


from:http://www.elecfans.com/dianzichangshi/20110622203220.html

相关文章:

  • 设计模式之6大原则
  • Cocos2d-x 屏幕适配解决方案
  • Cocos2d-x 3.0游戏开发找小三之搭建开发环境
  • Unity3d的ios项目在场景切换时候Crash的问题
  • Unity3D研究院之Android高通骁龙800以上CPU随机crash
  • iOS第三方开源库的吐槽和备忘
  • iOS常用控件、图片尺寸大集合
  • ios常用操作代码
  • 优秀的开源库
  • GitHub 上都有哪些值得关注学习的 iOS 开源项目?
  • 为iPhone 6设计自适应布局
  • 如何用Cocos2d-JS制作一个微信报名宣传页
  • cocos2dx-js学习笔记、官方tests示例
  • Unity3d+Jenkins 自动编译iOS、Android版本
  • 解决iOS应用内购买报错:invalidProductIdentifiers
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • crontab执行失败的多种原因
  • Git初体验
  • JAVA SE 6 GC调优笔记
  • Java 多线程编程之:notify 和 wait 用法
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • react 代码优化(一) ——事件处理
  • springboot_database项目介绍
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • tab.js分享及浏览器兼容性问题汇总
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue中实现单选
  • Xmanager 远程桌面 CentOS 7
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 从零开始在ubuntu上搭建node开发环境
  • 猴子数据域名防封接口降低小说被封的风险
  • 缓存与缓冲
  • 你不可错过的前端面试题(一)
  • 如何设计一个微型分布式架构?
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 用jquery写贪吃蛇
  • 在weex里面使用chart图表
  • 正则表达式
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • !$boo在php中什么意思,php前戏
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $.each()与$(selector).each()
  • (13)Hive调优——动态分区导致的小文件问题
  • (4)logging(日志模块)
  • (MATLAB)第五章-矩阵运算
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (三)终结任务
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (转)关于pipe()的详细解析