什么是框架?为什么说 Angular 是框架?

什么是框架?为什么说 Angular 是框架?

先摘录并翻译一段 wiki:

In computer programming, a software framework is an abstraction in which software providing generic functionality can be selectively changed by additional user-written code, thus providing application-specific software. A software framework provides a standard way to build and deploy applications. A software framework is a universal, reusable software environment that provides particular functionality as part of a larger software platform to facilitate development of software applications, products and solutions. Software frameworks may include support programs, compilers, code libraries, tool sets, and application programming interfaces (APIs) that bring together all the different components to enable development of a project or system.

在编程范畴,软件框架是指一种笼统情势,它提供了一个具有通勤奋效的软件,这些功效可以由使用者编写代码来有选择的举行变动,从而提供办事于特定使用的软件。软件框架提供了一种标准的办法来构建并摆设使用。

软件框架是一种通用的、可复用的软件情况,它提供特定的功效,作为一个更大的软件平台的一局部,用以促进软件使用、产物息争决方案的开发事情。软件框架约莫会包含支持步骤、编译器、代码、库、东西集以及 API,它把一切这些部件搜集在一同,以支持项目或体系的开发。

Frameworks have key distinguishing features that separate them from normal libraries:

框架和平凡的库在特性上具有一些紧张性的区别:

inversion of control_: In a framework, unlike in libraries or in standard user applications, the overall program’s flow of control is not dictated by the caller, but by the framework.

控制反转:与库或平凡的使用不同,在框架中,使用的大局控制流程不是由调用者决定的,而是由框架本身。

extensibility_: A user can extend the framework – usually by selective overriding; or programmers can add specialized user code to provide specific functionality.

可扩展性:用户可以扩展该框架 —— 通常是有选择的举行改写(Override)大概由步骤员添加专门的用户代码来提供特定的功效。

non-modifiable framework code_: The framework code, in general, is not supposed to be modified, while accepting user-implemented extensions. In other words, users can extend the framework, but should not modify its code.

不成修正框架代码:通常,框架代码都不方案让你修正,而是承受由用户本人完成的某些扩展。换句话说,用户可以扩展该框架,但是不应该修正它的代码。

外貌点比如(但不够严谨),框架就是条消费线,这条消费线上有很多工人(代码)在事情。消费线的办理者(步骤员)卖力办理这条消费线,好比说有的工序是空的,那么你就可以安插本人的工人进入,让他去告竣你的目标。有些工序上的工人干的事情和你预期的不同,你也可以安插本人的工人把他交换掉。

但是无论怎样,你的工人除了实行你的意志之外,还要恪守谁人工序的欺压性要求,他想磨洋工或精摹细琢是不可的,由于这个流水线上的下一个工序约莫有超时反省或质量反省,出了错直接就把这个流水线给你停掉,乃至关于一些欺压性反省,你作为办理者都无权忽略它。

可以想见,一条好的消费线的代价有多大。消费线绝不仅仅是一组机器罢了,它是很多年的办理履历的结晶,这些才是最值钱的,不然光靠那些机器能值几个钱?有了消费线,对工人(代码)的要求大大低落了,乃至对办理者(步骤员)的要求也大大低落了。固然,假如你只想消费个“能穿”的鞋子,那么这条消费线几乎没有附加代价,乃至会提高你的本钱。但是假如你想消费一个“高质量”的鞋子,那么这条消费线是他人的鞋子卖10块而你的鞋子能卖到1000块的基本保证。

总体来说,创建消费线的目标就是订定端正,保证品格,让高品格可以用较低的代价举行复制。框架也是云云。

从代码布局上看,框架在大局层面使用的都是注册、回调机制。这种机制有一个外貌的称呼,叫做好莱坞端正,为什么喝彩莱坞端正呢?由于好莱坞想要成名的演员太多了,都想去找导演,如此下去导演的事情听从势必会遭到严峻的影响。于是导演就立下了“端正”,不要打给我们(Don’t call us),等我们打给你(We’ll call you!)。由于这个 call 和步骤调用的 call 是同一个词,于是编程界就把这句话搬过去,变成了回调(callback)的外貌代言人。

好比在 Java 的 Spring 框架中,你只需给一个类加上 @Service 注解,它就会主动被 Spring 作为办事办理起来,当 Spring 以为必要的时分,就会创建这个类并且把它的实例传给需求方。在 Angular 中也是一样,你只需给一个类加上 @Component 注解(装饰器),它就会主动被 Angular 当做组件办理起来,当 Angular 以为必要的时分,就会创建这个类,并且把它的实例传给需求方(好比路由器)。

这些注解中还可以带一些分外信息,被称为元数据。所谓“元数据”就是 metadata,指的是关于数据的数据,这不是 Angular 自创的名词,别的编程范畴以前使用了几十年了。当 Angular 准备创建一个组件的时分,它就会找到这些元数据,从中找出这个组件的模板(由于组件本身是纯类,没有携带任何模板信息),然后据此对 DOM 举行利用。

而你写的这些组件类和模板,但是就是“由步骤员添加专门的用户代码来提供特定的功效”,由于框架是不会体贴你的组件的外表和逻辑的,它唯一体贴的就是你必需依照它的标准来事情,不然它就会给你报错(好比,“连模板都没有还敢说本人是 Angular 组件?”)。

而库则跟框架相反,大局上说,它是等着你调用的,你要什么功效它就给你什么函数,然后你调用这个函数,把所需的参数传进入就行了,而不是让你恪守它的那么多端正。以是你很自在,但是你也要本人为整件事卖力。你要本人创建组件、创建办事等,本人来驱动整个流程,本人做必要的反省,固然也可以不做,横竖对十块钱的鞋子他人约莫只渴望能穿一个月就行了。

那么,成绩来了,框架一定会比库高等吗?显然不是,乃至连框架的功效都不一定比库多。它们只是定位不同、计划理念不同罢了。关于 Angular 来说,它会更渴望你恪守一些端正,如此当体系必要长时维护、乃至要履历很多职员更迭的时分,才不至于堕落。它渴望每个开发职员都不必了解使用的全貌就能很好地完成事情(由于有如今工序的利用手册和反省点)。固然,它也不会干涉那些它不必要体贴的事变,好比组件模板中你放 h1 照旧放 div 它是不在乎的。这些目标用库也能到达,不外对职员的架构观和事情的自律性会有相应的要求,毕竟没人管了,那你本人就不克不及听任自流。

但是,在实际中,很多使用的整个生命周期约莫都不会凌驾一年,乃至另有很多生命周期几天的活动页,那么,这些使用和页面的可维护性但是并不紧张,乃至连对否能让不同的人协作都无所谓。那么点功效,能出什么 bug?一次性的需求,管什么可扩展性?这时分,学习本钱就会成为一个很紧张的参考要素。

学习 Angular 最难的就是恪守并了解端正。但是大局部人天生是不愿恪守端正的,特别是有些端正约莫他都无法了解为什么(固然这约莫是前人依据血的教导总结出来的)。但是,一旦恪守并了解了这些端正,那么一扇新的大门就对你关闭了,你会发觉跨上这个台阶之后,无论前端武艺照旧后端武艺照旧挪动端武艺,都依照着很多相反的理念,即使显现了新的挑唆,你也可以套用这些理念去处理。

端正即自在。孔子把“从心所欲,不逾矩”当做本人的最佳形态,但是很多事都是如此。一旦深入了解了计划和使用框架的头脑形式,你将迎来一个本性性的提升。

在我事情的前五年,编程时很“智慧”,用本事处理了很多成绩,但之后的十五年(恰幸而那一年我晓得了框架的看法),我爱上了端正,不仅本人给本人(依据血泪教导)立种种端正,并且从他人那边参考了很多端正,无论是大局的照旧微观的。可以说,端正就是固化的好习气,固然偶尔分也会成为拦阻,但是假如你想在编程范畴事情到退休,那么这些端正就是你外表上最大的资产,而对这些端正的来龙去脉的了解和意会,则是你深条理中最大的资产。


文/ThoughtWorks汪志成

原文:
https://insights.thoughtworks.cn/what-is-software-framework/

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享