小岑的架构学习笔记-架构到底是什么?

最近在学习极客时间《从0到1学架构》,记一些笔记。

每一个从事技术工作的同学,都有一个成为架构师的梦想,去从事设计架构方面的工作。那么架构这个词具体是什么?

在我平时的工作中,会进行团队内部分大功能的架构设计,平时也会通过各种渠道了解其他公司的架构设计。

但当我们聊架构的时候,我们具体是在聊什么?

基础名词

在具体定义什么是架构前,先将架构设计中经常提到的一些名词,先进行梳理。

系统和子系统

系统

系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。

引用的是来自维基百科的定义,有一些特点,如下所示:

关联: 系统是有一群有关联的个体所组成的,没有关联的个体不能够成为一个系统,也就是说在一个系统内部的东西,肯定是互相有所关联的。比如说我们在打造一间卧室,不可能把厕所放进卧室,只有当床,书桌,灯这些东西都在一个房间内时,才组成了卧室。如果从技术系统的角度上来说,我理解就是,一个系统内的功能或者模块的存在都是为了这个这个系统的定位服务的,比如说一个负责商户管理的系统,往往不会把用户相关的管理放进来。

规则: 一个系统内的个体肯定是按系统统一的规则运作,规定了系统内个体之间分工和协作的方式。比如一个交易系统,会定义校验模块,风控模块,限流模块,算价模块,落单模块,发券模块等,会定义好每个模块的职能以及协作的方式,完成整个交易流程。

能力: 个体组合在一起产生了新的系统能力,是单个个体所不具备的,比如汽车能够载重前进,但汽车中的单个个体抽出来都不具备这样的能力,比如发动机、变速器、传动轴、车轮。

子系统

我理解子系统的定义其实和系统是一样的,一个系统可能就是另一个系统的子系统。拿交易系统举个例子。

  1. 交易系统本身是一个系统,又包含了支付,退款,结算,下单等子系统
  2. 支付系统里可能又包含了对接支付系统和处理支付回调的系统。

模块和组件

维基百科定义如下

软件模块(Module)是一套一致而互相有紧密关连的软件组织。它分别包含了程序和数据结构两部分。现代软件开发往往利用模块作为合成的单位。模块的接口表达了由该模块提供的功能和调用它时所需的元素。模块是可能分开被编写的单位。这使它们可再用和允许人员同时协作、编写及研究不同的模块。软件组件定义为自包含的、可编程的、可重用的、与语言无关的软件单元,软件组件可以很容易被用于组装应用程序中。

我觉得模块,从个人感受上来说,模块主要定义的是功能的集合,是为了职责上进行分离,比如交易系统的下单流程 可能会分为 校验模块,优惠计算模块,风控模块,下单模块等,每个模块各司其职,只关注在自己的事情,当有一些业务需求变更时,只需要改动相应的模块,不会影响其他模块。

我觉得组件的话,从其英文单词component上,也可以翻译成零件一次,感觉像是独立可替换的东西,我个人对组件的理解是一个可复用的东西,可以根据需求放在不同模块里去使用,比如定义一个数据转换组件,统一的校验组件,统一的异常处理器,都可以理解是组件。

框架和架构

学习时,作者提到,很多人往往分不清楚框架和架构。但我个人理解框架和架构还是很好区分的。

框架,从维基百科的释义上是:

软件框架(Software framework)通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

也就是说框架关注的是规范,按照某一个规范去用这个框架,去实现我们要求的功能,并且额外提供一些基础功能,比如Srping MVC 是MVC的开发框架,除了满足MVC的规范,还提供了很多基础功能帮助开发者实现功能,比如注解,Security,JPA等。

框架,我的个人层面理解就是一种帮助开发者实现软件功能的工具,而架构是开发者决定如何去设计软件。

架构,从维基百科上的释义是:

软件架构指软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。

架构更关注的是结构,如何组成你的整个软件系统这件事。但由于在软件架构的定义中,并未将什么是基础结构明确说明,所以从不同的角度解读架构,其实都可以。

比如从业务逻辑角度来说,学生管理系统的架构可以是:

从物理部署的角度,学生管理系统的架构可以是:

从开发规范的角度,因为采用标准的MVC框架开发,学生管理系统的架构又可以是:

这些“架构”,都是“学生管理系统”正确的架构,只是从不同的角度来分解而已,这也是 IBM 的 RUP 将软件架构视图分为著名的“4+1 视图”的原因。

架构比较合理的理解

架构是一个软件系统的顶层结构,就像建筑设计师的草图,定义了整体的骨架,每一块布局之间如何串联,形成协同效应。

架构定义了软件中的各个系统,子系统,模块和组件,如何组成,并且如何运作和协作。

比如同样的一个交易系统,因为选择的架构不同,各个系统之间的交互方式,组成方式也会不同。

所以我的理解是架构决定的是软件系统的顶层设计,而且细化到每个单独的系统,也有其自己的架构设计。

站的视角越高,看到的架构越宽泛一些。

总结一下

架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值