什么叫组件化开发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么叫组件化开发相关的知识,希望对你有一定的参考价值。

张克军 提出的“组件化就是函数式界面开发”这一说法我是难以接受的,函数式界面开发就让它好好地叫“函数式组件化”吧,不然我们会在所谓的“传统UI框架”和“函数式界面开发”之间出现一个Gap,岂不是又要造个词给填上,多累……
我前面说会有一个Gap,这个Gap很可能就是我们现在想用“组件化”这个定义去表达的一些点,我想在此做一些个人的见解
我将之理解为以下几要素:

组件是对逻辑的封装,不限于图形元素。即我们可以把if做成组件、把一个倒计时做成组件、把一段动画做成组件、把路由做成组件、把数据架构做成组件,而这些并不能称为控件
组件具备单个可移植性,即“随加载随用”,不需要为其准备复杂的基础条件(如引入样式、引入框架等)。然而这一点现有那些所谓组件库做得并不好,技术上也不大现实
组件是声明式定义的,而非命令式。这个不想多说,很大程度上是自己主观的一个想法
而上面最重要的就是第一点,所以要问我什么是“组件化开发”,我的说法是:

把图形、非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式

这与传统开发框架的最大区别就是统一了图形元素与非图形元素,除此之外我再想不出其它真正体现区别的点了
在这个概念下,包括router、ajax、module loader、timer、animation、interval等,都是组件,共享统一的生命周期管理和对外接口,且都是声明式地进行组合
我的一位同事告诉我去年的深JS上,有位淘宝的朋友的话题叫做“前端组件服务化”,这里面提的那些个概念,是很符合我对“组件化”的认识的,他要是不给再强安个“服务化”的噱头就好了- -
不过话说回来,在这个要求之下,组件其实不是那么好进行抽象设计的,随便说几个例子,有难的也有简单的:

非图形元素的各种需求如何统一接口,如timer和ajax
组件可以横向组件,但是纵向复用如何解决,如希望任何图形元素都可以实现被鼠标拖拽的效果,则鼠标拖拽应该也是个组件,这个组件与其它组件的关系是什么
有些组件对其可被组合的组件是有要求的,比如html里就不大好意思把一个<p>放进一个<span>里,这一点如何在组件上表达(实现不难,表达比较难)
一些我们原本想当然认为纯的小函数的东西,是不是也能当组件玩,比如underscore.pick要不要也是个组件
参考技术A 我们在项目开发过程中,会发现很多东西都是可以复用或者希望能够在应用运行过程中进行动态变化。传统的开发模式中我们需要把代码统一放在前端进行处理,如果需要变更的话可以对整个应用更新最新的版本进行升级,也可以对部分文件进行升级和增加。但这些需要很多工作量。有些场景下我们只是为了某一个活动或者某一件事情临时进行的调整,而这种调整有时是比较频繁的,那么全量升级和补丁升级都太重了,我们需要更轻量级的方案。 组件化是一种非常合适的解决方案。组件化即是对某些可以进行复用的功能进行封装的标准化工作。组件一般会内含他的内部UI元素、样式和JS逻辑代码,它可以很方便的在应用的任何地方进行快速的嵌入。组件内部可以使用其他组件来构成更复杂的组件。本回答被提问者采纳 参考技术B 组件化编程的关键目的是为了将程序模块化,使各个模块之间可以单独开发,单独测试。当然,随之而来的DLL版本问题也必须要解决,防止出现不兼容的组件版本破坏程序的稳定性。

什么叫吸引力

一个平台不懂得通过分类管理来容纳他人,以任何理由拒人门外都是错误。

Linux通过GNU规则拒绝开发商进入,Windows通过价格门槛拒绝免费用户的进入。两权其害,避重就轻,Linux强制开发者无利可图,没有开发者就没有软件生态,没有软件生态就没有用户;Windows拒绝免费用户,用户减少至少还是有用户,有用户就有开发商。

最理想的环境,或者说商业模式,大家都知道,就是像qq、lol那样免费使用,服务收费。但也许没有很多人能明白它遵循了更正确的道理:通过分类容纳了所有人的进入,也为自己带来了财富或者说坚持的动力。

Android就是完美的例子,它脱离了Linux绑定的反商业限制,又免费的向开发商和消费者提供基础平台,所以现实生活印证了它遵循的道理。可惜的是,Android没有自己的根。

他们似乎都有各自的出路:Linux可以通过开放商业和闭源项目的存在来脱离水至清则无鱼的状态;Windows可以通过免费使用,服务收费来扩大自己的统一范围,但始终是一家商业公司;Google可以开发出自己的桌面操作系统来延续自己遵循的理念。而未来的生活会给我们带来什么呢?让我们拭目以待。

平等并不是一句口号,它需要你放弃狭隘的见识:放下对理想的执着,放下对利益的执着,不带自己的包裹坚持前行,然后两者都包容了进来,或者说吸引了过来。

以上是关于什么叫组件化开发的主要内容,如果未能解决你的问题,请参考以下文章

前端开发,LESS中的混合和继承有啥区别

QT开发——窗口组件和窗口类型

敏捷开发框架 初识组件式开发

敏捷开发框架 初识组件式开发

JS vue 组件创建过程

Android 组件化开发的新浪潮,成为了最受欢迎的框架!