架构是什么?
1. 架构和框架是什么关系?有什么区别?
1.1 系统与子系统
泛指一群有关联的个体组成的,根据某种规则运作,能完成单个组件不能单独完成的工作的群体。他的意思是总体,整体,或联盟。
- 其中重点概念就是:
- 关联,一群有关联的个体
- 规则,通过某种规则进行分工,和工作
- 能力,系统成员都有自己的能力
- 通过系统的概念是不是也能联想到我们现实的team,我们也可以比作一个系统(但是也有可能不是,因为有些人各自为政,不按套路,没有规矩出牌)。
- 那我们再关注一下现实中真实的系统,linux操作系统,微信系统,OA系统等等。是的,他们也是各个模块组装在一起,进行配合工作,各自去负责自己的工作。
1.2 模块与组件
- 其实说到模块和组件,在我们开发系统的时候,根据某种架构思想比如说DDD,进行架构,然后将系统分为多个模块,在模块中将我们使用的组件进行封装,例如我们在项目中的util。我这句话说的对吗?
- 什么是模块和组件?
- 软件模块(Module)是一套一致而互相有紧密关连的软件组织。它分别包含了程序和数据结构两部分。现代软件开发往往利用模块作为合成的单位。模块的接口表达了由该模块提供的功能和调用它时所需的元素。模块是可能分开被编写的单位。这使它们可再用和允许人员同时协作、编写及研究不同的模块(wiki)。
- 这怎么理解?想想我们在平时开发的模块,就拿DDD来讲吧,下图是DDD的四层架构模型,我们在开发的时候就将他分为4个模块,说到这是不是有点懵了!模块?架构?为什么四层架构要分为4个模块?架构是抽象语言,模块是架构的具体实现?
- 软件组件定义为自包含的、可编程的、可重用的、与语言无关的软件单元,软件组件可以很容易被用于组装应用程序中。
- 看完上面的定义和自己的疑问,看看大佬的说法
- 模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已。
- 从逻辑角度拆分是模块,从物理角度拆分是组件。
- 划分模块的主要目的是指责分离
- 划分组件的主要目的是单元复用
- 使用列子我们消化一下
- 我们设计一个垃圾管理系统,通过逻辑将垃圾管理系统分为收集垃圾模块,打包垃圾模块,处理垃圾模块。
- 从物理角度讲可以分为Nginx webserver mysal等件
- 奥原来是这样呀。看来是全部理解错了
1.3 框架和架构
- 框架和架构的概念
- 软件框架(Software framework)通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
- 框架是组件规范:例如,MVC 就是一种最常见的开发规范,类似的还有 MVP、MVVM、J2EE 等框架。
- 框架提供基础功能的产品:例如,Spring MVC 是 MVC 的开发框架,除了满足 MVC 的规范,Spring 提供了很多基础功能来帮助我们实现功能,包括注解(@Controller 等)、Spring Security、Spring JPA 等很多基础功能。
- 软件架构指软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。
- 单纯从定义的角度来看,框架和架构的区别还是比较明显的,框架关注的是“规范”,架构关注的是“结构”。
整体理解架构和框架
- 我们刚的举例,垃圾管理系统从逻辑角度将的架构是: 垃圾手机,垃圾打包,垃圾处理。
- 从无力角度的架构是:nginx ,web server ,mysql
- 从开发角度那就是DDD框架来开发,因此就变成了DDD架构。
- 一个垃圾系统有三种架构,是不是很屌,不同的角度就有不同的架构。在这里我们也可以了解一下著名的“4 1 视图”
总结
- 架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体
- 架构的重新定义
- 首先,“系统是一群关联个体组成”,这些“个体”可以是“子系统”“模块”“组件”等;架构需要明确系统包含哪些“个体”。
- 其次,系统中的个体需要“根据某种规则”运作,架构需要明确个体运作和协作的规则。
- 第三,维基百科定义的架构用到了“基础结构”这个说法,我改为“顶层结构”,可以更好地区分系统和子系统,避免将系统架构和子系统架构混淆在一起导致架构层次混乱。
那我们平时使用的SpringMVC 也就是基于MVC规范打造出来的一个框架,我们基于mvc框架来实现一个MVC架构的系统 或者说我们使用Axon是基于DDD的设计思想规范打造出来的一个框架,我们通过Axon实现一个DDD的框架。(个人的理解,欢迎大家批评指正)
今日思考
自己的下一步该怎么走?上一阶段目标是大概达成了。最近也没有太明确的短长期目标,设定段长期目标。