设计(design)、架构(architechure)、框架 (framework)之间是个什么关系?请描述一下?

每个人都在进行设计

在探讨题目问题之前,我们从设计开始聊聊。

其实我们每个人都在做设计,无论我们是在哪个行业,哪个层次,哪个职位。

  • 画家作画时会画草图做设计

  • 作家写作时会列提纲做设计

  • 程序员编码时会写伪代码做设计

  • 清洁工扫地时会在脑海里设计扫地的执行路径

设计有大有小

对于软件系统领域来说:

  • 在方法层次,我们可以设计方法名、变量名、语句块使得方法变得易懂、简洁、高效;

  • 在类的层次,我们可以设计其方法、成员变量、静态变量、继承关系及可见性级别等,使得一个类能更好地抽象与封装,方便其他人使用;

  • 在包的层次我们可以设计规划各个模块代码的位置,方便我们能快速找到对应的代码;

  • 在服务层次我们可以设计服务的粒度,暴露的功能,交流的协议,以方便服务间持续的交互;

  • 在系统层次我们可以通过设计系统暴露的功能、协作的形式以完成系统层次的协作;

  • 再往上依然存在需要设计的层级,如多个软件系统间协作完成的一个大的软件系统,但每个公司对此叫法可能不一样;

  • 软件系统再往上也有层级,但其可能就是人类自身的系统了。

这里各个层次的设计都有一个朴素的设计理念,那就是 提供抽象接口以此与外围交互、封装具体变化以此在内部独立演进。这个是我们完成某项复杂任务而组织的大型工程里的一个基础理念。

刚刚讲的是软件系统领域的设计,但其可扩展到各个领域,如人的系统、建筑的系统、小说的系统等等。

进行高层设计的人不一定精通底层的设计

当然,进行高层设计的人能融汇贯通其相关底层子系统的知识当然最好,但是大多数情况下,我们做不到,因为我们现在组织的系统的层级太多太深了。

举个例子,我们设计的业务代码在编译后能借助操作系统的能力协调CPU、内存及IO一起完成业务代码的执行,但是设计业务代码的人,不一定能知道CPU的流水线是怎么运作的、内存屏障是如何协调多个核心与内存的、数据具体是怎么传输到其他机器的。

再举个例子,某个大型公司CEO可能不懂编码,但其手下有不同类型的大将,包括懂技术的人才,因此CEO只要组织设计一个团体能覆盖其知识盲点,就能管理好整个公司,包括整个公司的各类软件系统。

从上面我们可以看到在做高层设计与做底层设计的人的能力是无法直接比较的,因为他们的能力栈可能完全不一样,无法简单地进行比较。

但通常的套路下,做高层设计的都是从底层设计的人才中转岗(叫提拔、晋升不一定合适,有时候底层设计的人才更为稀缺)而来的,因为只有你的设计能力在影响不那么大的层次经过验证后,才放心让你到更高层次进行设计。

架构与设计的关系

实际上架构是一种设计。

架构设计规定了主要组件间一些较大层次的约束与规范,一些较小层次的设计在这些约束与规范下进行的话,能最大限度地满足某些方面的特性,如可阅读性、可靠性、可扩展性、安全性等等。

举个例子,我们在设计一个屋子的时候,房间、厅、厨房等可以想象为架构,我们在进行软装的时候,是不能改变原有的设计的,不然随便敲墙容易造成安全隐患。但我们能控制软装的,形成风格各异的房间。

当然,设计层次的大小是相对的。在刚刚例子里一个屋子里的房间布局是架构。但往上看,在一个街区的架构设计里,一个屋子的内部房间布局仅仅只是一个较小层次的设计,其不会影响整个街区的规划。

因此,架构这一个词,应该存在于各个层次。就像我们在写代码时,运用各种设计模式,如责任链等,规定编写代码所使用的方式,以开闭原则保证代码稳定性及可阅读性时,我们就已经是这段可扩展的代码的架构师了。

架构与框架的关系

框架是架构的一种实现。

例如MVC这种架构设计(架构是每个层次都存在的),分离了不同类型代码的关注点,使得代码更为清晰及更易维护。

而各类MVC框架则实现了这种架构,只要我们基于这个框架扩展实现我们的代码,那么我们就能写出符合MVC架构规范的代码。

同时,在这里我们需要额外理清楚的一件事情是框架(framework)与库(library)的区别。我觉得以下这幅图很好地说明了这个区别。

总结

  • 为了完成某件事情,无论我们身处哪个职位,都需要进行设计;

  • 一个设计可以包含多个其他人负责的子设计,你的设计也可能是其他人设计的一部分;

  • 要完成一个复杂的任务,按层级拆分设计是一个常用的方法;

  • 为了底层设计实现的可控,达到我们预期的某些效果,我们要对设计进行规范与限制,这称为架构,这也是一种设计;

  • 就像设计有很多层次一样,架构也有很多的层次;

  • 框架是架构的具体实现,利用框架,并在框架/架构的约束下进行扩展/编码能加速我们代码的实现

最后

本文是基于目前个人理解而成,若文章有谬误,望不吝批评斧正;若本文对大家有所帮助,望不吝转发

相关阅读

你知道如何画好一幅架构图么?

ref:

  • https://simplicable.com/new/architecture-vs-design

  • https://www.programcreek.com/2011/09/what-is-the-difference-between-a-java-library-and-a-framework/

设计 VS 架构 VS 框架相关推荐

  1. 软件设计中架构和框架的区别

    构架和架构也就是通常所说的软件体系结构(software architecture). 体系结构一般包括三个部分: 1.构件:用于描述计算. 2.连接器:用于描述构件的连接部分. 3.配置:将构件和连 ...

  2. 从 Servlet 入手带你看架构和框架设计的套路

    以下代码相信大家都很熟悉,大学时学 Java Web 都写过这样的代码. 从第一次接触 Servlet 到之后的很长一段时间内,我都没理解 Servlet 是个什么玩意? 为什么要有 Servlet ...

  3. 软件工程课程设计·SOA架构搭建SSM框架的网上商城系统

    软件工程课程设计·SOA架构搭建SSM框架的网上商城系统 项目简介 本系统利用SSM框架.Dubbo框架.Maven模块化开发等技术开发的一个网上商城项目,主要包括订单系统模块.购物车系统模块.搜索系 ...

  4. php开发架构设计,基于php的快速搭建SPA开发架构的框架设计与开发

    程序 员之 家 基于 P h p 的快速搭建 S PA 开发架构的框架设计与 开发 ?叶松鑫 马 灏辉 何子 安 彭吉琪 黄钰冰 (佛 山科学技 术学 院 电子 信息工程 学 院 广东 佛 山 528 ...

  5. 企业架构研究总结(39)——TOGAF架构能力框架之架构委员会和架构合规性

    3. 架构委员会 正如前面所说,一个用来对架构治理策略的实现进行监督的跨组织的架构委员会是架构治理策略成功的主要要素之一.架构委员会应该能够代表所有主要干系人的需求,并且通常还需要对整个架构的审查及维 ...

  6. 插件式设计的架构模型与实例

    插件式设计近年来非常流行,其中eclipse起了推波助澜的作用,提到插件式就会不由自主的想到eclipse.其实插件式设计并不是什么新事物,早在几十年前就有了.像X Server就是基于插件式设计的, ...

  7. 温昱谈架构和框架(Framework)的区别

    笔者发现,人们对软件架构存在非常多的误解,其中一个最为普遍的误解就是:将架构和框架(Framework)混为一谈.本文阐述了它们的区别.算是对思辨成果的一个应用吧. 框架是一种特殊的软件,它并不能提供 ...

  8. 架构,框架,模式,模块、组件、插件的含义和区别

    架构.框架.模式.模块.组件.插件.控件.中间件的含义和区别.经常看到这些概念,但是有些含糊,花点儿功夫整理一下,结果还是有些地方理解的不透彻,先将整理的内容写下来,以供交流.左侧英文栏中有些单词被分 ...

  9. 如何一步步设计前端架构?

    前端有架构吗?前端有架构模式吗? 架构是什么? 软件架构,是一种为了解决复杂问题的通用模式.软件架构,是关于软件系统的一系列有层次的技术决策的集合.换句话来说,当我们讨论架构的时候,不能只讨论某某架构 ...

最新文章

  1. 一个mac地址对应多个ip_一个关于IP与mac地址绑定的故障
  2. NSBundle使用:获取文件路径
  3. Qt Assistant快速指南
  4. 图片优化之下一代图片格式WebP和AVIF
  5. 大剑无锋之分布式和微服务分别是什么?【面试推荐】
  6. 认清几种视频接口标准---无私奉献版
  7. 数据备份资深老牌厂商 Commvault 的新玩法
  8. mysql参数配置详情_MySQL配置文件mysql.ini参数详解、MySQL性能优化
  9. 笔记 | 机器学习《概率图模型》,手推笔记已186页!
  10. WPF UI布局之概述
  11. 小程序路径与APPID获取
  12. python下载豆丁文档_.NET - edu.docin.com豆丁校园
  13. wps安装Mathtype插件遇到的问题
  14. 电脑能正常上网,但登不上 QQ
  15. android l fox x86,【原创】X61T笔触(无手触)安卓(X86)系统真正完美
  16. 微信小程序接入环信客服
  17. C语言反汇编 - 多维数组与指针
  18. 电商订单系统,你该如何设计
  19. Oracle数据库,创建表并给表、字段添加注释.
  20. 金银岛(信息学奥赛一本通 - T1225)

热门文章

  1. Java入门-向下转型的安全判断
  2. SpringBoot 之自定义Banner
  3. intellij java 异常_突然出现的异常提示
  4. 为什么中年人更容易患老年痴呆症?原因找到了。
  5. filetype判断文件类型
  6. 南京地区营业执照办理流程
  7. linux 本地通信 socketpair 的使用
  8. “4G套餐这么香,升级5G做什么?”
  9. 【180630】VC++数独游戏源码
  10. SpringBoot缓存管理(二) 整合Redis缓存实现