1.模块(Model)

通常所指“模块”是指编程语言所提供的代码组织机制,利用此机制可将程序拆解为独立且通用的代码单元。

根据不同的关注点,将一个项目的可以共享的部分抽取出来,形成独立的Module,就是模块化。

对于JavaScript来说,在ES6之前,并没有语言内置的模块机制,但我们用一些方式自制了某种模块机制,像CommonJS / AMD甚至建立了普遍接受的社区标准。虽然它们都是模块机制,但会有一些重大或微妙的差异。故当我们提到JS模块时,如果没有足够的上下文,有时需要明确是CommonJS module或AMD module或ES6 module。

对于CSS来说,并没有普遍接受的“CSS模块”概念。一个CSS样式表里可以通过@import来引入其他样式表,但我们通常并不称之为“模块”。多份样式表以cascade机制结合,这和我们一般编程语言中模块互相调用的方式相当不同。且CSS的@import语义基本上就是最简单的include,也就是将@import语句替换为导入样式表的内容。而编程语言中的导入模块会在当前作用域导入命名空间、符号等,比简单的include要复杂许多。

有关“CSS模块”的问题,我们后面还会讨论。

注:在Web标准中,“CSS module”其实指CSS spec本身的模块化。这也是我们应该避免采用“CSS模块”来指代CSS代码的组织结构的重要原因。

其实我公司里对“模块”的用法也比较随便。比如我们有/static/js/modules/目录,其实下面就是一些脚本,并没有采用任何一种module规范。再如我们有/src/modules/目录,下面每个子目录是业务模块,里面包含了view、controller和相关的各种类。

这里一个是历史因素——目录结构不是我建立的,大家习惯如此,都知道我们讲的“module”是指业务模块,跟具体编程语言里的module没有直接的关系,只要沟通没有什么障碍,那也不必改了。不过当我们完成引入JS module loader和相关设施之后,很可能还是需要重新调整文档和目录命名,以避免可能的理解错位。

回到关于“模块”的定义讨论上,我建议运用此术语时尽量避免扩张性解释——即避免在脱离特定机制的general的“模块化”的意义上使用“模块”这个词。

比如,传统的JS代码组织方法之一,是挂在global上的层级命名空间。此严格上不好称之为“模块”。原因是namespace只提供逻辑划分,不解决代码本身的划分。如果没有其他机制,代码划分仍然是文件为单位,并由开发者自己指定script加载。同理,我们通常认为C++里没有模块(尽管有namespace和include),但是PHP我们认为有模块(因为它有autoloader可以根据namespace映射到目录去加载文件)。

当然,即便编程语言没有模块,我们仍然可以通过一些方式进行“模块化”编程,但这种模糊的用法有可能造成误解。在JS这边因为我们已经有很成熟的CommonJS / AMD / ES6 module了,更应避免模糊用法。

2.组建(component)

另一个概念是“组件”。大体上“组件”和“模块”的概念是类似的,只是“组件”通常指更high-level的东西。

我个人体会,“模块”指代码单元,其意义偏向静态的代码结构。而“组件”指功能单元,其意义偏向运行时的结构,并有更复杂的控制(如组件实例的生命周期管理)。

举例来说,在组件系统中,你应该可以比较容易的做到在运行时查找某种组件并替换为另一种组件(热插拔)。而这通常并不作为模块系统的需求——即使模块系统支持动态加载,通常也不支持注销旧模块;即使支持注销旧模块,通常也不支持替换所有旧模块的引用(意味着需要重新 实例化/初始化 模块依赖树上所有直接或间接引用此模块的模块)。

注:的确有某Node.js平台下的游戏框架设计以class作为模块单元,通过替换prototype来做到模块的热插拔。不过这其实要求非常多的编程方式约定,实际上可被视为使用的是JS的一个裁剪的特性子集,因而不具有普遍性。

转载于:https://www.cnblogs.com/Alice-67/p/10896128.html

模块的概念,组建地概念?相关推荐

  1. IDEA模块(module)的概念和使用_对比Eclipse

    IDEA模块(module)的概念和使用 一.对比eclipse,IDEA的module到底是什么? 在Eclipse中有Workspace (工作空间)和Project (工程)的概念,在IDEA中 ...

  2. 【数据挖掘】关联规则挖掘 Apriori 算法 ( 关联规则简介 | 数据集 与 事物 Transaction 概念 | 项 Item 概念 | 项集 Item Set | 频繁项集 | 示例解析 )

    文章目录 一. 关联规则挖掘简介 二. 数据集 与 事物 ( Transaction ) 概念 三.项 ( Item ) 概念 四.项集 ( Item Set ) 概念 五.频繁项集 六.数据集.事物 ...

  3. Python基础概念_2_基础概念

    基础概念 3 基础概念 3.1 数字 计算机最初设计时就是为了做数据运算的,所以针对这个概念应该不会陌生.在Python的世界里数主要有三种类型: 整数.浮点数和复数,详见下例: a) 5 是一个整数 ...

  4. 安卓应用开发期末与面试概念冲刺(概念与代码,from hitwh)

    安卓应用开发概念冲刺(概念与代码) 前三章 安卓整体体系结构(四个)以及其中包含什么 安卓将()和()分离? intent和Service的用处.ContentProvider用处 安卓四大核心组件 ...

  5. Vue—基础概念—组建化

    6.组件化 在大型应用开发的时候,页面可以划分成很多部分.往往不同的页面,也会有相同的部分.例如可能会有相同的头部导航. 但是如果每个页面都独自开发,这无疑增加了我们开发的成本.所以我们会把页面的不同 ...

  6. java中的分层概念_Java分层概念

    1.JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分?(下面所描述的service层就是biz) 首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对 ...

  7. java概念题_JAVA 概念笔试题

    1.分别写出分支结构,循环结构的语法格式.循环结构:while 循环 [html] view plaincopy(init_statement); while (test_expression) { ...

  8. 计算机主板的概念,华硕新型概念主机大爆料:内置未来主板

    [PConline 资讯]一年一度的COMPUTEX台北电脑展即将开幕,而在正式开始前,华硕曝光了旗下一系列新品,其中非常吸人眼球的要数全新的华硕一体化概念装置机了,让我们先来一睹为快吧. 发布会现场 ...

  9. 【Web接口测试_基础概念】接口概念、接口分类、接口定义、接口规范、接口方法、接口用例设计整理

    [接口基础] 1.接口测试概念 1.1 基础概念 接口的定义:接口英文"interface",表示某个对象和外界交互的部分. 1.2接口的分类: ①用户UI接口,表示提供给用户操作 ...

最新文章

  1. Google Test(GTest)使用方法和源码解析——私有属性代码测试技术分析
  2. C语言实现常用数据结构——队列
  3. linux 下创建文件的方法
  4. Centos iptables常用命令及设置
  5. (一)Rational Rose 2007 下载安装
  6. Linux集群和自动化维1.3 如何根据服务器应用选购服务器
  7. gulp.js 4.0试用
  8. Java毕业设计-医院药品管理系统
  9. 华为eNSP模拟器vlan 隔离技术的实现
  10. 基于80C51单片机——中断小结
  11. 微信小程序-实现元素渐入渐出动画效果-封装方法
  12. pygame 播放音乐
  13. VMware虚拟化- vMotion 迁移原理与应用
  14. python的for语句中i未被定义_python 报错 类名没有被定义
  15. python分拣豆子_一, 认识一下Python
  16. 合并BIN文件的两种方法
  17. python序列是几维_numpy中三维阵列的二维切片序列
  18. 计算机毕业设计Java悦途旅游网(系统+程序+mysql数据库+Lw文档)
  19. 如何屏蔽网页弹窗和广告网站
  20. 在Python里应用Openscad实现3D建模(修改简化版)之3D螺纹建模初探2

热门文章

  1. golang init函数:全局变量优先于 > init函数 > main函数
  2. sonarQube 7.2版本下载配置pmd插件(版本要兼容),并设置只使用pmd规则
  3. 深入理解spark两种调度模式:FIFO,FAIR模式
  4. loadrunner脚本设计:检查点(断言)及web_submit_data函数使用示例
  5. Scala 语言转义字符
  6. Linux CentOS6.7设置为固定静态IP的方法
  7. Hadoop大数据——mapreduce的排序机制之total排序
  8. 远程桌面上的文件复制到本地
  9. jQuery验证用户名是否可用
  10. 34篇Java基础总结博客陪博主入门Java