企业架构模式——分层

原创 2011年01月15日 12:40:00

一、分层设计的基本概念

在分解复杂的软件系统时,软件设计者用的最多的技术之一就是分层。在计算机体系机构中,可以看到,到处都有分层的例子,最为典型的,就是存储器的层次结构,如图所示:

存储器的层次结构

图1:计算机存储器的层次模型

可以看到,存储器的层次结构是按访问速度、存储容量等参数划分的,不同的层次有不同的职责。CPU内部的寄存器组是访问速度最快的存储设备,用于存储CPU运算过程中的指令和数据;主存中存储的的则是执行中程序(进程)需要的代码和数据。由于CPU访问主存的速度很慢,因此引入了高速缓存处理器(高速缓存),用于缓解CPU访问寄存器和主存的速度差异。同样,计算机网络中的TCP/IP协议栈也把层次性的设计思维体现的淋漓尽致:

TCP

图2:TCP/IP协议栈的五层模型

在层次结构中,上层模块依赖于下层模块,下层模块为上层模块提供服务,在代码中体现,就是上层可以调用下层提供的公共方法。比如应用层协议FTP架构在传输层TCP之上、TCP架构在互联网层协议IP之上。

当用分层的观点来考虑系统时,可以将各个子系统想象成“多层蛋糕”的形式,每一次都依托在其下层之上。在这种组织方式下,上层使用了下层定义的各种服务,而下层对上层一无所知。另外,每一层都对自己的上层隐藏其下层的细节。因此,第3层使用第2层提供的服务,第2层使用第1层提供的服务,第3层无需知道第1层的细节(当然,并非所有的分层架构都这么隔绝)。

将系统按照层次分解有很多好处:

①在无需了解其他层次的基础上,可以将某一层作为一个整体来理解

②可以很容易替换某层的实现,只要其前后提供的服务(接口)相同即可

③可以将层次间的依赖性减到最低

④一旦构建好了某一层,就可以用它为很多上层服务提供支持。比如,TCP可以同时被telnet、FTP和HTTP使用

分层式一种重要的技术,但也有缺陷

①层次有时会带来级联修改

②层次提供了一种间接性,因此过多的层次会影响性能

当人们讨论分层时,常常不容易区分layer和tier。这两个词汇经常被用作同义词,但是很多人还是认为tier意味着物理上的分离。客户/服务器系统常常被称为“two-tier system”,其分离是物理上的分离:客户端是一台台式机,而服务器端则运行在在另一个地方的服务器。layer强调无需把不同的层次放在不同的计算机上运行。

二、三个基本层次

层次 职责
表现层 与用户交互的接口
领域层(业务层) 业务逻辑,系统的核心
数据源层 与数据库、消息系统及其他软件包通讯

表现层:处理用户与软件的交互

领域层:也称为业务层,它完成领域相关的工作:包括根据输入数据或已有数据进行计算、对从表现层输入的数据进行验证,以及根据从表现层接受到的命令来确定应该调度哪个数据源逻辑。

数据源层:主要关注与其他系统的交互。比如数据库、消息系统等。

在某些小型系统中,表现层跨过了领域层而直接去和数据源层交互,实践证明这样也可以工作很好,不过这样的系统的业务逻辑都很简单。

三、参考资料

1、企业架构模式    Martin Flower  

[附:Android平台架构图、金山卫士产品架构图]

Android系统架构                        金山卫士产品架构图

 

企业架构模式——分层

一、分层设计的基本概念 在分解复杂的软件系统时,软件设计者用的最多的技术之一就是分层。在计算机体系机构中,可以看到,到处都有分层的例子,最为典型的,就是存储器的层次结构,如图所示: 图1:计算...
  • zhangnian_it
  • zhangnian_it
  • 2011年01月15日 12:40
  • 560

php mysql No such file or directory[2002]

可能是由于mysql.sock不在搜索路径里, 在如下目录建立mysql.sock的连接 /tmp/ /var/mysql/...
  • 0210
  • 0210
  • 2015年03月08日 17:45
  • 2110

MyBatis学习总结(六)——调用存储过程

一、提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二、准备数据库表和存储过程 1 create table p_user( 2 id i...
  • u012881584
  • u012881584
  • 2017年01月16日 13:36
  • 53

IOS开发系列—Objective-C之Foundation框架

概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底...
  • jianxin160
  • jianxin160
  • 2015年08月18日 15:55
  • 1693

数据备份——PHP

在大多数情况下,开发实在win下进行,因此,然系统每天自动备份数据这也是有必要的饿。 Windows平台数据备份 创建批处理文件 在批处理文件中填写如下代码: ...
  • qq_28787211
  • qq_28787211
  • 2017年06月13日 18:48
  • 145

phpMyAdmin配置记录

windows下直接解压到网站目录就能用linux下解压到网站目录后需要修改一下配置文件,具体修改方式官网有详细的说明。按照官网的方式配完以后登录出现了这样的错误: phpmyadmin #200...
  • alan19931103
  • alan19931103
  • 2016年04月10日 16:51
  • 725

虚拟化——互联网时代的…

高技术高竞争的互联网时代,对产品的交付时间逐步变短,而对交付质量的要求逐步提高,各种新创意、新产品层出不穷,市场允许的产品推出周期也越来越短,传统的软件开发模型已经无法跟上当前的需求,高效、便捷、可迭...
  • tomora
  • tomora
  • 2013年09月15日 10:23
  • 444

MySQL/phpmyadmin问题解决手记:#2002 – 服务器没有响应 (或者本地 MySQL 服务器的套接字没有正确配置)

在fedora 12下使用自己从源代码编译的mysql使用,安装过程很麻烦,但好在运行正常。 之前使用windows下mysql/phpmyadmin,到linux下,当然也少不了,整个phpm...
  • whatday
  • whatday
  • 2016年02月25日 11:17
  • 19710

Linux进程间通信——信号量

信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是前一节的共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。一般说来,为了获得共...
  • feiskyer
  • feiskyer
  • 2012年09月29日 09:55
  • 697

Linux进程间通信——消息队列

消息队列是消息的链接表,包括Posix消息队列system V消息队列。消息队列用于运行于同一台机器上的进程间通信,它 和管道很相似,有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走...
  • feiskyer
  • feiskyer
  • 2012年09月29日 09:55
  • 833
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:企业架构模式——分层
举报原因:
原因补充:

(最多只允许输入30个字)