框架是和架构比较相似的概念,而且两者有着较强的关联关系,所以在实际工作中,很多时候这两个概念并不是分得那么清晰,参考维基百科,框架的定义如下:
软件框架(Software Framework)
通常指的是为了实现某个业界标准或者完成特定基本任务的软件组件规范,也指为了实现某某个软件组件规范时,提供规范做要求之基础功能的软件产品。
框架
是组件规范,比如:MVC就是一种常见的开发规范,类似的有MVP、MVVM、J2EE等框架。
框架提供基础功能的产品。比如:Spring MVC是MVC的开发框架,除了满足MVC的规范,Spring提供了很多基础功能来帮助我们实现功能,包括注解@Controller,Spring Security,Spring JPA等很多功能。
参考维基百科,这里简单的翻译为软件架构师指软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。
单从定义的角度来看,框架和架构的区别还是比较明显的,框架关注的是规范,架构关注的是结构。框架的英文是Framework ,架构的英文是Architecture。Spring MVC的英文文档标题是Web Framework,包目录也有framework。
尽管如此,在实际工作中我们却经常碰到一些似而非似的说法,比如:
我们的系统吃MVC架构 我们需要将Android App重构 MVP架构 我们的系统基于SHH框架开发 我们的系统是SHH的架构
以上几种说法到底是对还是错呢?
其实以上说法都是对的,造成这种现象的根本原因隐藏于架构的定义中,关键字“基础结构”,这个概念并没有很明确的说清楚从什么角度来讲的,从不同的角度或者维度,可以将系统划分为不同的结构,其实我们再“模块与组件”中的样例已经暗含了这点,继续以学生信息管理系统为例。
从业务逻辑的角度分解,”学生信息管理系统“的架构如下:
从物理部署的角度分解,“学生信息管理系统”的架构如下:
从开发规范的角度分解,“学生信息管理系统”可以采用标准的MVC来开发,因此架构又变成了MVC架构了,如下图:
以上这些架构 ,都是学生信息管理系统正确的架构,只是从不同的角度来分解而已。