设计(design)、架构(architechure)、框架 (framework)之间是个什么关系?请描述一下?java
在探讨题目问题以前,咱们从设计开始聊聊。程序员
其实咱们每一个人都在作设计,不管咱们是在哪一个行业,哪一个层次,哪一个职位。设计模式
对于软件系统领域来讲:安全
这里各个层次的设计都有一个朴素的设计理念,那就是 提供抽象接口以此与外围交互、封装具体变化以此在内部独立演进。这个是咱们完成某项复杂任务而组织的大型工程里的一个基础理念。架构
刚刚讲的是软件系统领域的设计,但其可扩展到各个领域,如人的系统、建筑的系统、小说的系统等等。框架
固然,进行高层设计的人能融汇贯通其相关底层子系统的知识固然最好,可是大多数状况下,咱们作不到,由于咱们如今组织的系统的层级太多太深了。布局
举个例子,咱们设计的业务代码在编译后能借助操做系统的能力协调CPU、内存及IO一块儿完成业务代码的执行,可是设计业务代码的人,不必定能知道CPU的流水线是怎么运做的、内存屏障是如何协调多个核心与内存的、数据具体是怎么传输到其余机器的。编码
再举个例子,某个大型公司CEO可能不懂编码,但其手下有不一样类型的大将,包括懂技术的人才,所以CEO只要组织设计一个团体能覆盖其知识盲点,就能管理好整个公司,包括整个公司的各种软件系统。操作系统
从上面咱们能够看到在作高层设计与作底层设计的人的能力是没法直接比较的,由于他们的能力栈可能彻底不同,没法简单地进行比较。架构设计
但一般的套路下,作高层设计的都是从底层设计的人才中转岗(叫提拔、晋升不必定合适,有时候底层设计的人才更为稀缺)而来的,由于只有你的设计能力在影响不那么大的层次通过验证后,才放心让你到更高层次进行设计。
实际上架构是一种设计。
架构设计规定了主要组件间一些较大层次的约束与规范,一些较小层次的设计在这些约束与规范下进行的话,能最大限度地知足某些方面的特性,如可阅读性、可靠性、可扩展性、安全性等等。
举个例子,咱们在设计一个屋子的时候,房间、厅、厨房等能够想象为架构,咱们在进行软装的时候,是不能改变原有的设计的,否则随便敲墙容易形成安全隐患。但咱们能控制软装的,造成风格各异的房间。
固然,设计层次的大小是相对的。在刚刚例子里一个屋子里的房间布局是架构。但往上看,在一个街区的架构设计里,一个屋子的内部房间布局仅仅只是一个较小层次的设计,其不会影响整个街区的规划。
所以,架构这一个词,应该存在于各个层次。就像咱们在写代码时,运用各类设计模式,如责任链等,规定编写代码所使用的方式,以开闭原则保证代码稳定性及可阅读性时,咱们就已是这段可扩展的代码的架构师了。
框架是架构的一种实现。
例如MVC这种架构设计(架构是每一个层次都存在的),分离了不一样类型代码的关注点,使得代码更为清晰及更易维护。
而各种MVC框架则实现了这种架构,只要咱们基于这个框架扩展实现咱们的代码,那么咱们就能写出符合MVC架构规范的代码。
同时,在这里咱们须要额外理清楚的一件事情是框架(framework)与库(library)的区别。我以为如下这幅图很好地说明了这个区别。
本文是基于目前我的理解而成,若文章有谬误,望不吝 批评斧正 ;若本文对你们有所帮助,望不吝 推荐。
多年金融码农,现为某信用卡中心架构师,EasyTransaction做者,欢迎关注
ref: