- 外文名
- Module
- 基本属性
- 接口、功能、逻辑、状态
- 定 义
- 可管理模块的方式
- 中文名
- 模块化
- 运行模式
- 独立的工作运行模式
-
模块化
2012-07-19 05:47:18在编写软件的时候,非常提倡模块化的做法,不管是当初的面向过程的编程方式,还是现在面向对象的编程方式,模块化都很重要。而过程和函数更是模块化的产物,至于OSGi中的bundle,更是把模块化提升到新的高度。模块化...在编写软件的时候,非常提倡模块化的做法,不管是当初的面向过程的编程方式,还是现在面向对象的编程方式,模块化都很重要。而过程和函数更是模块化的产物,至于OSGi中的bundle,更是把模块化提升到新的高度。
模块化应该是一个借鉴的结果,最早的模块化从何而来,已经无从考证,但是看看其他学科中,模块化的存在已经有一段时间了。
比方说建筑学,活动房或者一些新的建筑方式中就体现了模块化的思想,先制造出一些可以直接利用的组件,然后在建筑工地上直接组合,就可以造出一片房子来。
再比方在电子领域,体现的更为突出,集成电路把很多电阻、电容等等小部件组合在一起,这样在制造电器的时候并不需要从头做起,而是直接拿过来使用就好。
模块化的思想基于划分的思想,或者说是分类的思想,就是要把类似的、相互关联的内容放在一起管理,从而从总体上简化过程。而每个模块的内部可能比较复杂,但暴露给外部的接口会比较简单,那样使用的时候,就不用考虑内部的复杂性,从而简化问题。
模块的好处更多在于能够批量生产和重复利用,软件领域有句话说“不要重复制造轮子”,轮子其实就是汽车制造行业中的一个大模块,汽车制造厂更多的是在组装轮子,而不是制造轮子。而软件开发领域同样不需要什么内容都从头开始编写,如果有现成的程序库,大可以拿过来直接使用,那样不仅能够提高效率,还可以降低出错的几率。
生活有时同样可以模块化,比方说对时间的管理,我们可以按照番茄工作法,把时间划分为小的时间段,然后在每个时间段内分配类似的工作或者事情,从而更好地集中精力来做好这件事。再比方,在做各种事情的经验上,其实也是在头脑中形成了不同的模块来放置,并进行了归类。在解决新的问题时,就会把经验从大脑的各个存储领域取出来,组合出一套新的解决方案来。
分解和组合是对模块使用的重要方式,分解可以让我们了解内部的细节,在模块出现问题的时候,可以知道如何解决。而组合可以把小的模块形成大的模块,再把大的模块组合成更大的模块,直到形成我们想要的事物。
模块化体现的哲学思想,有“一生二,两仪生四象,四象生八卦”的思想,也有分而治之的思想,也有大事化小,小事化了的思想,总之这几种都有异曲同工之妙。
-
什么是模块化,模块化的好处是
2019-07-15 20:25:43什么是模块化,模块化的好处是? 模块化是一种处理复杂系统分解为更好的可管理模块的方式。 所谓的模块化开发就是封装细节,提供使用接口,彼此之间互不影响,每个模块都是实现某一特定的功能。模块化开发的基础...什么是模块化,模块化的好处是?
模块化是一种处理复杂系统分解为更好的可管理模块的方式。
所谓的模块化开发就是封装细节,提供使用接口,彼此之间互不影响,每个模块都是实现某一特定的功能。模块化开发的基础就是函数。模块化开发使用代码耦合度降低,模块化的意义在于最大化的设计重用,以最少的模块、零部件,更快速的满足更多的个性化需求。
模块化的好处
优点:
a . 可维护性
1、灵活架构,焦点分离
2、方便模块间组合、分解
3、方便单个模块功能调试、升级
4、多人协作互不干扰
b . 可测试性
可分单元测试
拓展:
缺点:
性能损耗
1、系统分层,调用链会很长
2、模块间发送消息会很耗性能
补充:
内聚度
内聚度指模块内部实现,它是信息隐藏和局部化概念的自然扩展,它标志着一个模块内部各成分彼此结合的紧密程度。好处很明显。当把相关的任务分组后去阅读就容易多了。设计时应该尽可能的提高模块内聚度,从而获得较高的模块独立性。
耦合度
耦合度则是指模块之间的关联度的度量。耦合度取决于模块之间接口的复杂性,进入或调用模块的位置等。与内聚度相反,在设计时应尽量追求松散耦合的系统。
-
什么是模块化?模块化的好处
2019-07-15 21:16:37什么是模块化 简单地说,模块化就是有组织地把一个大文件拆成独立并互相依赖的多个小模块。 模块内部有许多私有属性,只向外暴露一部分公开的接口(如可以修改私有属性的方法等) 模块化是一种处理复杂系统分解为更好...什么是模块化
简单地说,模块化就是有组织地把一个大文件拆成独立并互相依赖的多个小模块。
模块内部有许多私有属性,只向外暴露一部分公开的接口(如可以修改私有属性的方法等)
模块化是一种处理复杂系统分解为更好的可管理模块的方式。
所谓的模块化开发就是封装细节,提供使用接口,彼此之间互不影响,每个模块都是实现某一特定的功能。模块化开发的基础就是函数。模块化开发使代码耦合度降低,模块化的意义在于最大化的设计重用,以最少的模块、零部件,更快速的满足更多的个性化需求。
模块化的好处
ES6之前,JavaScript语言一直没有模块(module)体系,无法把大文件有组织地划分成小块,并管理之间地依赖。但是模块化的思想一直存在。因为用Javascript写的代码越来越庞大,而网页也越来越像桌面APP。如此庞杂的代码,如果不进行模块化,就可能引发命名冲突,造成不易复用、维护性高。使用模块化开发好处
1.高内聚低耦合,有利于团队作战,当项目很复杂的时候,将项目划分为子模块分给不同的人开发,最后再组合在一起,这样可以降低模块与模块之间的依赖关系体现低耦合,模块又有特定功能体现高内聚。
2.可重用,方便维护,模块的特点就是有特定功能,当两个项目都需要某种功能的时候,我们定义一个特定的模块来实现该功能,这样只需要在两个项目中都引入这个模块就能够实现该功能,不需要书写重复性的代码;并且当需求变更该功能需要改变的时候,我们直接修改该模块,这样就能够修改所有项目的功能,维护起来很方便。
3、通过 exports 暴露接口。这意味着不需要命名空间了,更不需要全局变量。这是一种彻底的命名冲突解决方案。
4、通过 require 引入依赖。**这可以让依赖内置,开发者只需关心当前模块的依赖,其他事情 Sea.js/ Require.js 都会自动处理好 -
前端模块化
2020-10-29 15:15:04前端模块化 前端模块化是什么 所谓模块化,就是指根据功能的不同进行划分,每个功能就是一个模块。最终,一个完整的产品是由各个模块组合而成的。 模块化的特点: 独立性。可以针对一个模块单独进行设计、研发,相对...前端模块化
前端模块化是什么
所谓模块化,就是指根据功能的不同进行划分,每个功能就是一个模块。最终,一个完整的产品是由各个模块组合而成的。
模块化的特点:- 独立性。可以针对一个模块单独进行设计、研发,相对工作量和难度变小。
- 复用性。一些通用模块(例如登录或注册)可以被重复使用,而不用每次重新开发。
- 解耦性。模块与模块Z间,付作一永P所l块的工作。
- 灵活性。通过选择和组合不同的模块,可以快速构建一个新的产品。
ECMAScript5的模块化
函数的封装
函数的定义可以将代码逻辑封装在指定的函数作用域中。可以将函数的封装作为自定义模块化的第一步:
functien outer(){ var v= '卧龙学苑'; function inner(){ return 'this is inner function.'; } }
上述代码示例中,定义了outer()函数,方便在后面的逻辑中进行调用。outer()函数就可以看作是一个模块。
但是,这样的做法有着明显的缺点,就是污染了全局命名空间。换句话讲,无法在全局作用域再定义一个 outer()函数。
对象的自定
为了解决封装函数所带来的问题,可以引入JavaScript对象的概念。就是把所有相关的模块成员封装在一个对象中。
var outer = { v: '卧龙学苑', inner: function () { return 'this is inner function.'; } }
如上述代码示例,使用对象实现的好处:
- 解决了全局命名空间可能出现的冲突问题。因为所有的模块成员都是作为一个对象的属性或方法存在的。
- 模块成员之间也存在着某种关系。因为被定义在同一个JavaScript对象中,作为属性或方法存在。而这个对象名成为了所有模块成员对外的一个统一的模块名称。
自调函数
看似引人对象概念后,这个模块的解决方案不错,但依旧存在着一些问题。对于这样一个模块(对象),是可以从外部对该模块(对象)的属性或方法进行修改的。这就导致了会产生一些意外的安全问题,而这个问题可以通过自调函数来进行解决。
var outer = (function () { var v = 'longestory'; function inner() { return 'this is inner function.'; } })();
最终模块化结构
如果想要在真实开发中使用模块化概念,代码结构还需要进一步优化。
var outer = (function () { var v = 'longestory'; var interface = { getAttr: function () { return v; }, inner: function () { return 'this is inner function.'; } } return interface; })();
ECMAScript6的模块化
ECMAScript 2015提供了基于原生的模块化概念。一个ECMAScript 2015的模块就是一个单独的JavaScript 文件,与普通的JavaScript 文件之间仅有两个区别:
- ECMAScript 2015的模块自动开启严格模式,即使没有写use strict。
- 可以在模块中使用import和export 命令。
export命令
export命令用于将指定的模块内容导出,该命令可以修饰在function、var、let或 const等之前。
export var v = 100; export let = 'this is string.'; export function fn(){ return 'this is function.'; }
export命令除了上述方式以外,还可以这样编写:
var v= 100; let l = 'this is string.'; function fn(){ return 'this is function.'; } export { v, l, fn }
上述两种写法是等价的。但一般建议使用第二种写法,因为这样更直接,更清晰。
import命令
import命令用于导人其他模块所提供的功能,基本语法如下:
import {...} from modulepath;
根据上述语法结构,可以通过import命令导入其他模块:
import {v,l,fn} from './temp.js';
值得注意的是,使用import命令导入的名称必须与模块使用export导出的名称一致。
使用import命令导入其他模块的内容时,默认使用的是模块声明的名称。也可以在导入时,进行重命名。import { v as variable } from './temp.is';
前端模块化规范
模块化开发可以将复杂的Web应用程序拆分成若干个模块,模块之间的相互依赖很低。使得开发结构更为清晰,依赖更为明确。在实际开发中,经常引人第三方的模块,例如 jQuery库等。
但是,ECMAScript 官方到目前为止并没有为模块化提供一个统一的标准规范,这可能导致每个模块的编写方式不同。
目前,最为流行的JavaScript模块化规范具有以下几种:
- CommonJS
- RequireJS
- SeaJS
CommonJS
2009年,美国程序员Ryan Dahl创造了Nodejs 项目,将JavaScript语言用于服务器端编程。这标志“JavaScript模块化编程”正式诞生。
Nocejs,的模块系统,就是参照CommonJS规范实现的。在CommonJS 中,有一个全局性方法require(),用于加载模块。
CommonJS的Modules规范实现了一套简单易用的模块系统,ComnmonJS对模块的定义也十分的简单。主要分为模块定义、模块引用及模块标识三个部分。
RequireJS
RequireJS是一个JavaScript模块加载器。它非常适合在浏览器中使用。
RequireJS是一个基于AMD规范实现的函数,它区别于传统的CommonJS的require 规范。因为它能够异步地加载动态的依赖。
AMD( Asynchronous Module Definition,译为异步模块定义)是一个在浏览器端模块化开发的规范。模块将被异步加载,模块加载不影响后面语句的运行。所有依赖某些模块的语句均放置在回调函数中。
AMD是RequiceJS在推广过程中对模块定义的规范化的产出。
加载RequireJS
在HTML页面中通过
<script>
元素引人RequireJS,如下示例代码:<script src="scripts/reauire.is"></script>
这样加载 JavaScript 文件可能导致HTML页面失去响应。解决办法有两种,一是将
件的引入代码放置在HTML页面的底部,二是将代码改写成如下方式:<script src="scripts/ require.is" defer async="true" ></script>
async属性表示异步加载 JavaScript 文件,避免HTML页面失去响应。但是E浏览器不支持该属性,可以利用defer 属性进行替换。
主模块的编写
通过如下方式定义 RequireJJS 的主模块:
<script data-main="scripts/main.is" src="scripts/require.is" defer async="true" ></script>
data-main属性表示设置当前HTML页面程序的主模块。由于require.js 默认的文件后缀名是 js,所以可以把 main.js简写成main。
定义模块
RequireJS使用define()函数来定义一个模块。定义模块的常见形式如下:
- 键值对方式定义
- 函数式定义
- 存在依赖的函数式定义
define(["./cart", "./inventory"], function (cart, inventory) { //return an object to define the "my/shirt" module. return { ` color: "blue", size: "large", addToCart: function (){ inventory.decrement(this); cart.add(this);` } } });
加载模块
RequireJS使用config()函数对模块的加载行为进行自定义。
require.config({ paths: { "jquery": "jquery.min", "underscore": "underscore.min", "backbone": "backbone.min" } });
RequireJS 使用require()函数来加载指定模块。
require(['jquery', 'underscore', 'backbone'], function ($,_, Backbone) { //some code here });
SeaJS
Sea.js追求简单、自然的代码书写和组织方式,具有以下核心特性:
-
简单友好的模块定义规范: Seajs 遵循CMD规范,可以像Nodejs一般书写模块代码。
-
自然直观的代码组织方式:依赖的自动加载、配置的简洁清晰,可以让我们更多地享受编码的乐趣。Seajs 还提供常用插件,非常有助于开发调试和性能优化,并具有丰富的可扩展接口。
CMD (Common Module Definition,译为通用模块定义)规范明确了模块的基本书写格式和基本交互规则。该规范是在国内发展出来的。
CMD是 SeaJS在推广过程中对模块定义的规范化的产出。
加载SeaJS
在HTML页面中通过
<script>
元素引人 SeaJS,如下示例代码:<script src="scripts/sea.is"></script>
这样加载JavaScript 文件可能导致HTML页面失去响应。解决办法有两种,一是将JavaScript文件的引入代码放置在HTML页面的底部,二是将代码改写成如下方式:
<script src="scripts/sea.is" defer async="true" ></script>
async属性表示异步加载 JavaScript 文件,避免HTML页面失去响应。但是IE浏览器不支持该属性,可以利用defer 属性进行替换。
加载模块
SeaJS利用config()方法进行配置:ll seais的简单配置:
seajs.config({ base: "./seajs/", paths: { module: "module" } alias: { "hello": "module" } })
SeaJS利用use()方法加载模块:/加载入口模块
seajs.use("hello",function(value){ var h1 = document.createElement("h1"); h1.textContent = value.hello; document.body.appendChild(h1); });
定义模块
SeaJS利用define()方法定义模块:
// 所有模块都通过define来定义 define(function (require, exports, module) { // 通过require引入依赖 var $ = require('jquery'); var Spinning = require('./spinning'); // 通过exports对外提供接口 exporto.doSomething= ... // 或者通过module.exports提供整个接口 module.exports = ... });
-
什么是模块化?模块化有哪些优缺点
2020-12-20 19:51:10什么是模块化 简单说就是把系统分成各个独立的部分,每个部分单独实现功能,将系统分割成可独立的功能部分。 随着MVC等框架、微服务等技术的兴起,模块化开发已经称为必须。web前端也已经演变称为大前端。 模块化... -
前端工程化、模块化、组件化
2019-04-28 12:31:53而模块化和组件化是为工程化思想下相对较具体的开发方式,因此可以简单的认为模块化和组件化是工程化的表现形式。 前端工程化分为三个大阶段 技术选型 构建优化 模块化开发,组件化开发 模块化 ... -
Python模块化编程
2018-11-01 16:59:11模块化 自定义模块 模块的内置属性 导入模块 安装第三方模块 查看模块的属性和方法 模块化 在Python中,一个.py文件就称之为一个模块(Module),为了避免模块名冲突,Python又引入了按目录来组织模块的方法,... -
javascript模块化
2018-09-06 17:15:51javascript模块化也不是一天两天了,但是随着技术的发展,常用的模块化方式也就那几种,正所谓数风流模块还看今朝,所以就来对比一下当下使用比较多的commonJS和es6标准中提出的模块化方式。 commonJS commonJS... -
模块化开发-概念篇
2020-08-10 16:31:30模块化可以说是当下最重要的前端开发范式之一,它随着前端应用的日益复杂, 我们的项目代码已经逐渐膨胀到了不得不花大量时间去管理的程度了。 而模块化呢就是一种最主流的代码组织方式 它通过把我们的复杂代码... -
什么是模块化?模块化的好处是什么
2019-07-15 11:18:45什么是模块化? 简单地说,模块化就是有组织地把一个大的文件拆分成独立并且相互依赖地小模块。模块内有许多的私有属性,只向外暴露一部分公开地接口,(如可以修改私有的属性方法等)与外部模块通信 模块化的好处是... -
模块化机制
2017-11-27 13:37:11模块化 前端项目日益庞大,涉及到的业务方面越来越多,现在比较流行的是组件化开发,剩下就是模块化、工程化了。最新的ES6页支持了类class和模块module属性;对于模块化一直以来都不是特别清楚,趁机记录一下。 1.... -
JS模块化和使用
2020-08-13 08:38:37JS模块化和使用 很久以前就知道js模块化开发可以使用require.js和sea.js,就一直没去看看。最近在了解查看的,度一下require.js相关的博客和文章,写得真是操蛋的疼,都是互相抄来抄去,博主应该都没有自己实际去敲... -
JavaScript 模块化
2017-11-08 15:49:51了解了一下js模块化,简单记录一下。参考资料: JavaScript 模块化历程 前端模块化模块化发展历程 js一开始并没有模块化的概念,直到ajax被提出,前端能够像后端请求数据,前端逻辑越来越复杂,就出现了许多问题... -
软件模块化
2019-05-16 17:37:16模块化是指将软件划分成独立命名且可独立访问的模块,不同的模块通常具有不同的功能或职责。每个模块都具有可以独立地开发、测试,最后组装成完整的软件。 -
js模块化编程一:模块化函数的介绍
2017-01-15 17:45:10js模块化一:模块化函数的介绍 -
模块化开发
2015-03-30 22:23:57什么是模块化? 模块化是个一般概念,这一概念也适用于软件开发,可以让软件按模块单独开发,各模块通常都用一个标准化的接口来进行通信。实际上,除了规模大小有区别外,面向对象语言中对象之间的关注点分离与模块... -
什么是模块化,模块化开发如何实现?
2017-01-15 17:49:17什么是模块化,模块化开发如何实现? 那么什么是模块化呢,时下流行的库与框架又有哪些在利用模块化进行开发呢? 今天我从以下两个方向来进行描述,如果描述不够准确,还请各位多多指正。 1.什么是模块化? ... -
Android 开发:由模块化到组件化(一)
2016-12-15 01:43:15当你看到这的时候,想必心理一阵恶寒:模块化?组件化?到底是什么鬼?有啥区别. 有这种感觉才是对的,模块化和组件化本质思想是一样的,都是"大化小",两者的目的都是为了重用和解耦,只是叫法不一样.如果非要说区别,那么... -
maven模块化
2018-10-08 17:02:06我们为什么要进行模块化开发? 在多人使用Maven协作开发项目时,尤其是稍微上点规模的项目,每个RD的工作都细分到具体功能和模块,有些模块甚至还要单独部署。 我们假设有这样一个商城项目,包括以下几个模块: ... -
6 JS的模块化 ES6模块化及webpack打包
2018-05-31 21:02:52转自:...今天我就打算梳理js模块化的历史进程,讲一讲这些方案要做什么,怎么做。js模块化进程的起因现今的很多网页其实可以看做是功能丰富的应用,它们拥有着复杂的JavaScript代码和... -
模块化到组件化
2018-03-08 11:54:05模块化:模块化就是将一个程序按照其功能做拆分,分成相互独立的模块,以便于每个模块只包含与其功能相关的内容。 组件化:每个组件是一个独立的app。每个组件都有自己独立的版本,可以独立的编译,测试,打包和部署 ... -
使用阿里ARouter路由实现组件化(模块化)开发流程
2017-12-08 17:05:20Android平台中对页面、服务提供路由功能的中间件,我...模块化的要解决的问题 模块间页面跳转(路由); 模块间事件通信; 模块间服务调用; 模块的独立运行; 模块间页面跳转路由拦截(登录) 其他注意事项; ... -
前端模块化、组件化的理解
2019-02-19 23:02:51前端模块化、组件化的理解 到底什么是前端工程化、模块化、组件化 前端组件化思想 浅谈前端架构的工程化、模块化、组件化、规范化 -
CSS模块化(六) 模块化设计
2014-03-25 10:49:546. 模块化设计 6.1 样式的作用域──页面重构中的模块化设计(一) 模块化设计我已经提过很多了,都是跟模块化相关的,不过之前一直没有讲到具体实现方面的内容,只是一些思维。这次重点讲一下实现方面的内容,权... -
APP模块化组件化
2018-03-23 18:02:29APP模块化组件化 该库部分思想借鉴了”得到”APP: 个人demo地址:MyComponent 得到开源地址:得到APP 组件化缘故: 当项目逐渐变大的时候,每次你改动了很小的一部分,你也需要重新编译整个APP,举个例子,修改了... -
快速理解 JS 模块化
2018-05-30 23:30:02JS 模块化是一个集特殊功能的 JS 文件,将所有的数据和功能封装在一个函数内部(私有的),只向外暴露一个包含 N 个方法的对象或函数,模块使用者,只需要通过模块暴露的对象调用方法来实现对应的功能。 参与本话题... -
模块化布局
2017-10-30 14:11:08在PCB layout中模块化布局很重要,在进行模块化布局时需要的准备工作: 1)在原理图和PCB的tools中分别进行选中“cross select mode”,选中后会有一个小框,如下图: 2)使得原理图和PCB界面分屏于... -
浅谈Android模块化设计(模块化的一些思考)
2017-03-26 15:40:32在学习模块化的过程中,也在不断思考,同时和一些模块化方案的作者进行了一些交流,记录下自己的一些心得体会。为什么要使用模块化,使用什么样的模块化?我认为使用模块化的原因,从代码层面考虑精髓就是解耦合,从... -
Vue学习笔记之初识模块化开发
2020-07-25 17:18:561、ES6模块化的实现 <script src="aaa.js" type="module"></script> 模块化开发声明:type="module" 是为了防止各模块直接变量或方法的冲突,每一个模块都有自己的空间 导出:export对象 导出...
-
FFmpeg4.3系列之26:视频监控之H265多路摄像头播控项目实战
-
性能测试面面观
-
Halcon学习之五:有关图像的定义域的函数.doc
-
babel下载 babel.min.js babel免费下载
-
java+sql2000 控制台学生住宿信息管理.zip
-
草图大师模型库.rar
-
[SLFM 020] Recursive Number Theory - R.L.Goodstein (NH 1957)(T).pdf
-
MFC开发简单聊天程序
-
一维信号的形态学分析核心算法实现(for matlab)
-
pyinstaller-4.2-py3-none-any.whl
-
数据库表空间不能online问题处理.docx
-
m_AvatarManager.zip
-
1. 回溯法解全排列问题
-
Selenium3分布式与虚拟化
-
Halcon学习之四:有关图像生成的函数.doc
-
[SLFM 004] On the Metamathematics of Algebra - Abraham Robinson
-
web前端开发规范
-
WPF上位机数据采集与监控系统零基础实战
-
[SLFM 007] Many-Valued Logics - J.B.Rosser, A.R.Turquette (NH 1952)(T).djvu
-
具体考虑要不要给你打电话