架构和框架有什么关系
系统与子系统
系统泛指有一群有关联的个体组成,根据某种规则运行,能完成个别原件不能单独完成的工作的群体,他的意思是:总体、整体,联盟
keywords:
关联:系统由一群有关联的个体组成的,没有关联的个体堆在一起不能成为一个系统。两个齿轮,可,齿轮和苹果,不行。
规则:系统内的个体需要按照指定的规则运行,而不是单个个体各自为政。规则规定了系统内个体分工和协作的方式。发动机产生动力,变速器和传送轴,将动力输出到车轮上,驱动前进。
能力:系统能力和个体能力有本质的差别,系统能力不是个体能力之和,而是产生了新能力。汽车可以跑,移动,但是零件不能动。
子系统:子系统也是由一群有关联的个体组成的系统,多半会是更大系统中的一部分。
子系统和系统的定义是一样的,只是观察的角度有差异,一个系统可能是另外一个更大系统的子系统
以微信为案例进行分析
1.微信本身是一个系统,包含了登陆,聊天,支付,朋友圈等子系统
2.朋友圈这个系统又包括,动态,评论,点赞等子系统‘
3.评论这个系统可能包括,防刷子系统,审核子系统,发布子系统,存储子系统
4.评论审核子系统不在包含业务意义上的子系统,而是包括各个模块或者组件。这些模块或者组件本身也是另外一个维度上的系统,Mysql/Redis是存储系统,但不是业务子系统。
模块与组件
模块与组件在实际工作中容易混淆,有以下说法需要我们注意
MySQL模块主要负责存储数据,而ElasticSearch模块主要负责数据搜索
我们有安全加密组件,有审核组件
App的下载模块使用了第三方的组件
模块和组件的定义并不好理解,很难区分
软件模块
软件模块是一套一致而相互有精密关连的软件组织,包括了程序和数据结构两部分,现代软件开发往往利用**模块作为合成的单位.**模块的**接口表达了由该模块提供的功能和调用它所要的元素**,**模块是被分开编写的单位**,这使他们**可再用和允许人员同时协作,编写以及研究**不同的模块.
软件组件
软件组件定义为自包含的,可编程的,可重用的,与语言无关的软件单元,软件组件可以很容易被用于组装应用程序.
假设拆分
一个学生信息管理系统
逻辑角度,职责分离拆分,登陆注册模块,个人信息模块.个人成绩模块;从物理角度拆分,可以拆分为Nginx,Web服务器,MySQL.
框架与结构
框架和架构是比较相似的概念,两者有较强的关联关系。框架关注的是“规范”,架构关注的是“结构”。
软件架构,为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
框架是组件规范,MVC,MVP,MVVM,J2EE等框架。
框架提供基础功能的产品:Spring MVC是MVC的开发框架,除了满足MVC的规范,还提供了很多基础功能来帮助我们实现功能。
软件框架指的是软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。
4+1视图
1.用例视图,场景视图 Use-Case View
2.逻辑视图 Logical View
3.实现视图,开发试图 Implementation View
4.部署试图,物理视图 Deployment View
优点:
系统边界:确定系统设计范围,观察系统需要与用户或者其它系统进行交互。
系统用户:明确用户定义是系统需求分析的先决条件
功能和场景:通过识别出系统与用户或其它系统的交互,可以分析出系统需要提供哪些功能,以及这些功能存在哪些应用场景。
框架关注的是“规范”,架构关注的是“结构”
从物理部署得角度讲架构 Nginx-Web服务器-MySQL
从开发规范角度分解讲框架 成了MVC架构
架构既可做动词也可做名词,作为动词就代表系统的设计,作为名词就代表系统的表现形式
模块与组件
模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已.
从逻辑的角度拆分系统后,得到的单元就是"模块"
从物理的角度拆分系统后,得到的单元就是"组件"'
划分模块的主要目的是职责分离
划分组件的主要目的是单元复用
组件=零件 是一个物理概念,并且具备"独立且可替换"的特点
什么是架构
软件架构指软件系统得顶层结构
系统泛指有一群有关联的个体组成,根据某种规则运行,能完成个别原件不能单独完成的工作的群体,他的意思是:总体、整体,联盟
1.系统是一群关联个体组成”,这些“个体”可以是“子系统”“模块”“组件”等;架构需要明确系统包含哪些“个体”
2.系统中的个体需要“根据某种规则”运作,架构需要明确个体运作和协作的规则
3.顶层结构”,可以更好地区分系统和子系统,避免将系统架构和子系统架构混淆在一起导致架构层次混乱。