张克军提出的“组件化就是函数式界面开发”这一说法我是难以接受的,函数式界面开发就让它好好地叫“函数式组件化”吧,不然我们会在所谓的“传统UI框架”和“函数式界面开发”之间出现一个Gap,岂不是又要造个词给填上,多累……
我前面说会有一个Gap,这个Gap很可能就是我们现在想用“组件化”这个定义去表达的一些点,我想在此做一些个人的见解
我将之理解为以下几要素:
组件是对逻辑的封装,不限于图形元素。即我们可以把if做成组件、把一个倒计时做成组件、把一段动画做成组件、把路由做成组件、把数据架构做成组件,而这些并不能称为控件
组件具备单个可移植性,即“随加载随用”,不需要为其准备复杂的基础条件(如引入样式、引入框架等)。然而这一点现有那些所谓组件库做得并不好,技术上也不大现实
组件是声明式定义的,而非命令式。这个不想多说,很大程度上是自己主观的一个想法
而上面最重要的就是第一点,所以要问我什么是“组件化开发”,我的说法是:
把图形、非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式
这与传统开发框架的最大区别就是统一了图形元素与非图形元素,除此之外我再想不出其它真正体现区别的点了
在这个概念下,包括router、ajax、module loader、timer、animation、interval等,都是组件,共享统一的生命周期管理和对外接口,且都是声明式地进行组合
我的一位同事告诉我去年的深JS上,有位淘宝的朋友的话题叫做“前端组件服务化”,这里面提的那些个概念,是很符合我对“组件化”的认识的,他要是不给再强安个“服务化”的噱头就好了--
不过话说回来,在这个要求之下,组件其实不是那么好进行抽象设计的,随便说几个例子,有难的也有简单的:
非图形元素的各种需求如何统一接口,如timer和ajax
组件可以横向组件,但是纵向复用如何解决,如希望任何图形元素都可以实现被鼠标拖拽的效果,则鼠标拖拽应该也是个组件,这个组件与其它组件的关系是什么
有些组件对其可被组合的组件是有要求的,比如HTML里就不大好意思把一个<p>放进一个<span>里,这一点如何在组件上表达(实现不难,表达比较难)
一些我们原本想当然认为纯的小函数的东西,是不是也能当组件玩,比如underscore.pick要不要也是个组件
模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性。模块化本体是指具有模块结构的本体(知识库的一种表现形式)。模块化用来分割,组织和打包软件。模块化是一种处理复杂系统分解成为更好的可管理模块的方式。一种是基于非经典语义的逻辑语言扩展,如分布式描述逻辑,E-连接和基于包的描述逻辑;另外一种途径是基于经典描述逻辑语义,但限制对外部符号的使用以保证各模块可安全的合并。
模块化
模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性。模块化本体是指具有模块结构的本体(知识库的一种表现形式)。模块化用来分割,组织和打包软件。模块化是一种处理复杂系统分解成为更好的可管理模块的方式。一种是基于非经典语义的逻辑语言扩展,如分布式描述逻辑,E-连接和基于包的描述逻辑;另外一种途径是基于经典描述逻辑语义,但限制对外部符号的使用以保证各模块可安全的合并。
基本信息
运行模式
独立的工作运行模式
基本属性
接口、功能、逻辑、状态
作用
模块化用来分割,组织和打包软件。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。
模块具有以下几种基本属性:接口、功能、逻辑、状态,功能、状态与接口反映模块的外部特性,逻辑反映它的内部特性。
在系统的结构中,模块是可组合、分解和更换的单元。模块化是一种处理复杂系统分解成为更好的可管理模块的方式。它可以通过在不同组件设定不同的功能,把一个问题分解成多个小的独立、互相作用的组件,来处理复杂、大型的软件。
模块化本体
模块化本体是指具有模块结构的本体(知识库的一种表现形式)。许多应用领域需要模块化的本体,如
协作式本体开发
分布式数据管理
大规模本体的管理和推理
本体的部分重用
当前,实现模块化本体主要有两种主要的语言途径。一种是基于非经典语义的逻辑语言扩展,如分布式描述逻辑,E-连接和基于包的描述逻辑;另外一种途径是基于经典描述逻辑语义,但限制对外部符号的使用以保证各模块可安全的合并。
组件(Component)和模块(Module)是一对容易混淆的名词,也常常被用来相互替换。两者是否有差异往往取决专业背景、所在领域、以及视角。
从设计上来看,组件强调复用,模块强调职责(内聚、分离),或者说组件是达到可复用要求的模块。
Module,中文为模块或模组。它的核心意义是分离职责,属于代码级模块化的产出。本身是一组具有一定内聚性代码的组合,职责明确。对外的接口可以是松散的,也可以是集中的。
转载请注明:片头模版 » 组件模块化(什么叫组件化开发)