设计,架构,框架之间是什么关系?

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

每一个人都在进行设计

在探讨题目问题以前,咱们从设计开始聊聊。程序员

其实咱们每一个人都在作设计,不管咱们是在哪一个行业,哪一个层次,哪一个职位。设计模式

  • 画家做画时会画草图作设计
  • 做家写做时会列提纲作设计
  • 程序员编码时会写伪代码作设计
  • 清洁工扫地时会在脑海里设计扫地的执行路径

设计有大有小

对于软件系统领域来讲:安全

  • 在方法层次,咱们能够设计方法名、变量名、语句块使得方法变得易懂、简洁、高效;
  • 在类的层次,咱们能够设计其方法、成员变量、静态变量、继承关系及可见性级别等,使得一个类能更好地抽象与封装,方便其余人使用;
  • 在包的层次咱们能够设计规划各个模块代码的位置,方便咱们能快速找到对应的代码;
  • 在服务层次咱们能够设计服务的粒度,暴露的功能,交流的协议,以方便服务间持续的交互;
  • 在系统层次咱们能够经过设计系统暴露的功能、协做的形式以完成系统层次的协做;
  • 再往上依然存在须要设计的层级,如多个软件系统间协做完成的一个大的软件系统,但每一个公司对此叫法可能不同;
  • 软件系统再往上也有层级,但其可能就是人类自身的系统了。

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

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

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

固然,进行高层设计的人能融汇贯通其相关底层子系统的知识固然最好,可是大多数状况下,咱们作不到,由于咱们如今组织的系统的层级太多太深了。布局

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

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

从上面咱们能够看到在作高层设计与作底层设计的人的能力是没法直接比较的,由于他们的能力栈可能彻底不同,没法简单地进行比较。架构设计

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

架构与设计的关系

实际上架构是一种设计。

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

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

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

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

架构与框架的关系

框架是架构的一种实现。

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

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

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

总结

  • 为了完成某件事情,不管咱们身处哪一个职位,都须要进行设计;
  • 一个设计能够包含多个其余人负责的子设计,你的设计也多是其余人设计的一部分;
  • 要完成一个复杂的任务,按层级拆分设计是一个经常使用的方法;
  • 为了底层设计实现的可控,达到咱们预期的某些效果,咱们要对设计进行规范与限制,这称为架构,这也是一种设计;
  • 就像设计有不少层次同样,架构也有不少的层次;
  • 框架是架构的具体实现,利用框架,并在框架/架构的约束下进行扩展/编码能加速咱们代码的实现

最后

本文是基于目前我的理解而成,若文章有谬误,望不吝 批评斧正 ;若本文对你们有所帮助,望不吝 推荐

相关阅读

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

做者我的公众号

多年金融码农,现为某信用卡中心架构师,EasyTransaction做者,欢迎关注

ref:

相关文章
相关标签/搜索