什么是模块化?为什么要进行模块化开发?

这篇具有很好参考价值的文章主要介绍了什么是模块化?为什么要进行模块化开发?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

模块化是一种软件开发的设计模式,它将一个大型的软件系统划分成多个独立的模块,每个模块都有自己的功能和接口,并且能够与其他模块独立地工作。

 先来一段八股文

模块化开发可以带来以下好处:

  • 提高代码的复用性:模块化可以将代码划分成可重用的部分,降低代码的冗余和重复,提高代码的复用性。

  • 简化代码的维护和调试:当一个软件系统变得越来越复杂时,进行模块化开发可以使得每个模块都相对独立,这样就可以方便地维护和调试每个模块,而不必考虑整个系统的复杂性。

  • 提高代码的可读性:模块化可以使得代码更加结构化,清晰明了,从而提高代码的可读性和可维护性。

  • 提高开发效率:模块化开发可以使得团队成员在不同模块上并行开发,从而提高开发效率。

  • 降低项目的风险:模块化开发可以使得开发人员更加关注模块之间的接口和依赖关系,从而降低项目的风险。

总之,模块化开发是一种有效的软件开发模式,可以提高软件开发的质量、效率和可维护性,特别是在大型软件系统的开发中,模块化更是必不可少的。

实际工作中如何使用

场景一:在前后端交互的ajax请求中,对不同的请求进行分类,每一个种类的业务放到一个模块中,有用户相关的、商品列表相关的、订单相关的各种,为了使业务逻辑更加清晰,更改相关代码的时候,只需要找到对应的文件,用户相关的就去user.js修改,商品相关的就去goods.js修改等等,是不是清楚多了,这是不是好用多了?

来看看示例user.js

import axios from '../utils/request'
import md5 from 'md5'

// 登录
export const login = async (params)=>{
  let {data} = await axios.post('users/login',{params})
  if(data.success){
    // 在浏览器缓存中存储token
    sessionStorage.setItem('token',data.token)
  }
  return data
}
// 修改密码
export const resetPwd = async (params)=>{
  // 要对密码加密
  let {data} = await axios.post('users/resetPwd',params)
  return data
}
//...other business

示例,goods.js

export const getDetail = async (id)=> {
  let {data} =  axios.get(`/goods/detail/${id}`);
  return data
}

export const getCategory = async () =>{
  let {data} =  axios.get('/categories');
  return data
}

export const search = (params) =>{
  let {data} =  axios.get('/search', { params });
  return data
}

每个js(模块)都有自己的相关的代码,代码之间互不影响。

如下代码所示,所有的请求都放到一个文件中,不分模块

import axios from '../utils/request'
import md5 from 'md5'

// 登录
export const login = async (params)=>{
  let {data} = await axios.post('users/login',{params})
  if(data.success){
    // 在浏览器缓存中存储token
    sessionStorage.setItem('token',data.token)
  }
  return data
}
//查询商品
export const search = (params) =>{
  let {data} =  axios.get('/search', { params });
  return data
}

// 修改密码
export const resetPwd = async (params)=>{
  // 要对密码加密
  let {data} = await axios.post('users/resetPwd',params)
  return data
}
//商品详情
export const getDetail = async (id)=> {
  let {data} =  axios.get(`/goods/detail/${id}`);
  return data
}
//获取商品分类
export const getCategory = async () =>{
  let {data} =  axios.get('/categories');
  return data
}

//...other business

是不是很乱,这只是一点点业务,如果大一点业务系统,里面有百十个接口,如果不能按照模块划分,代码就会是一座屎山,多人协作会出问题、代码维护无从下手

场景二:大家都知道单页面应用程序,他的最大优势就是不用切换页面,对用户体验极好。例如vue常见的页面是头、尾、菜单不动,只有内容区域动,在dom中扣去一块旧的,换一块新的,这样看来,每一块都应该是独立存在的,也就是咱们常见的.vue文件,使用webpack将.vue文件转为.js文件,这个js就是一个模块化的文件,通过路由把页面和名字进行关联,扣掉和换上新的都需要操作路由来完成

总结一下,模块化其实就是分门别类。

 附加几种模块化语法

不管哪种语法,只是一种固定的写法,重点了解两个概念,一个导出(暴露当前模块),一个导入(用那个模块)

1. CommonJS

CommonJS 是一种用于服务器端 JavaScript 的模块化规范,使用 require 和 module.exports 导出和引入模块。例如:

// math.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
const hello = () => '千锋,你好';

module.exports = {
  add,
  subtract,
  hello
};

// app.js
const math = require('./math');

console.log(math.add(2, 3)); // 输出 5
console.log(math.subtract(3, 2)); // 输出 1
console.log(math.hello); // 输出千锋,你好

2. AMD

AMD(Asynchronous Module Definition,异步模块定义)是用于浏览器端 JavaScript 的模块化规范,使用 define 定义模块,通过 require 异步加载模块。例如:

// math.js
//define第一个参数表示当前模块所依赖的模块,可以是一个字符串数组,也可以是一个函数
// 定义一个名为 "math" 的模块,依赖于 "jquery" 和 "underscore" 两个模块
define(['jquery', 'underscore'], function($, _) {
  // 定义模块的功能
  const add = function(a, b) {
    return a + b;
  };
  const multiply = function(a, b) {
    return a * b;
  };
  const test = ()=>{
    var arr = ['foo', 'bar', 'qfedu'];
    var arrUpper = _.map(arr, function(str) {
      return str.toUpperCase();
    });
    return  arrUpper;
  }
  
  // 导出模块的功能
  return {
    add: add,
    multiply: multiply,
    test:test
  };
});

// app.js
require(['./math'], function(math) {
  console.log(math.add(2, 3)); // 输出 5
  console.log(math.subtract(3, 2)); // 输出 1
  console.log(math.test())//输出 ["FOO", "BAR", "QFEDU"]
});

3. ES6 模块

ES6 模块是 JavaScript 的官方模块化规范,使用 import 和 export 导入和导出模块。例如:

// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;

// app.js
import { add, subtract } from './math';

console.log(add(2, 3)); // 输出 5
console.log(subtract(3, 2)); // 输出 1

4. UMD

UMD(Universal Module Definition,通用模块定义)是一种支持多种模块化规范的通用模块化方案,它既支持 CommonJS,又支持 AMD 和全局变量。例如:文章来源地址https://www.toymoban.com/news/detail-411559.html

(function (root, factory) {
  if (typeof define === 'function' && define.amd) {
    define(['exports'], factory);
  } else if (typeof module === 'object' && module.exports) {
    factory(module.exports);
  } else {
    factory((root.myModule = {}));
  }
}(typeof self !== 'undefined' ? self : this, function (exports) {
  const add = (a, b) => a + b;
  const subtract = (a, b) => a - b;

  exports.add = add;
  exports.subtract = subtract;
}));

到了这里,关于什么是模块化?为什么要进行模块化开发?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA/IC】什么是模块化设计?

    FPGA/IC设计中根据模块层次的不同有两种基本的设计方法: 自下而上 方法对设计进行逐次划分的过程是从基本单元出发的,设计树最末枝上的单元是已经设计好的基本单元,或者其他项目开发好的单元或者IP。该方法先对底层的功能块进行分析,然后使用这些模块来搭建规模

    2024年03月19日
    浏览(41)
  • js模块化开发

    ◼ 到底什么是模块化、模块化开发呢?  事实上模块化开发最终的目的是将程序划分成一个个小的结构;  这个结构中编写属于自己的逻辑代码,有自己的作用域,定义变量名词时不会影响到其他的结构;  这个结构可以将自己希望暴露的变量、函数、对象等导出给其结

    2024年02月13日
    浏览(50)
  • 深入理解JavaScript模块化开发

    前言: 随着JavaScript应用程序的复杂性不断增加,模块化开发成为了一种必备的技术。通过将代码划分为模块,我们可以提高代码的可维护性、可重用性和可扩展性。在本文中,我们将深入探讨JavaScript模块化开发的概念、优势和不同的模块化方案。 模块化开发是将一个大型应

    2024年02月08日
    浏览(81)
  • Vue的模块化开发初探

    Vue是一个渐进式JavaScript框架,可以按需引入部分功能,而不必全量引入整个框架。 2.1 下载必须模块 在浏览器输入: https://unpkg.com/vue@3/dist/vue.esm-browser.js ,右键另存为,保存到demo.html文件同级目录下。 2.2 安装Live Server插件 在VSCode插件市场搜索Live Server并安装,如下图: 2.

    2024年04月10日
    浏览(52)
  • 前端基础(Vue的模块化开发)

      前言 :前面学习了前端HTML、CSS样式、JavaScript以及Vue框架的简单适用,接下来运用前端模块化编程的思想,继续学习Vue框架,完成自己项目项目的搭建。 目录 响应式基础 ref reactive 学习成果展示 Vue项目搭建 搭建自己的vue项目 总结  关于ref和reactive,官方解释如下,另外一

    2024年02月12日
    浏览(43)
  • LabVIEW应用开发——VI模块化

            我们在写C语言的时候,一些模块化的功能或者多次调用的功能,我们一般会用一个函数封装起来,方便使用并且让代码看起来更加的简洁。这种函数一般都会包含这几个概念, 输入参数 、 输出参数 和 返回值 。而LabVIEW的VI就可以当作是一个函数, 输入参数 就是

    2024年02月07日
    浏览(43)
  • Python面向对象编程,实现模块化开发

    面向对象编程(Object Oriented Programming,OOP)是一种编程范式,它将真实世界中的事物抽象成程序中的对象,并通过对象之间的相互作用来完成程序的逻辑。 封装 (Encapsulation) 封装是指把数据和行为结合成一个相对独立的整体,防止程序中其他部分直接访问或修改这个整体,而

    2024年02月05日
    浏览(127)
  • 【Unity】程序集Assembly模块化开发

    笔者按:使用Unity版本为2021.3LTS,与其他版本或有异同。请仅做参考 一、简述。 本文是笔者在学习使用Unity引擎的过程中,产学研的一个笔记。由笔者根据官方文档Unity User Manual 2021.3 (LTS)/脚本/Unity 架构/脚本编译/程序集定义相关部分结合自身经验所做,有不足之处,还请指正

    2024年02月15日
    浏览(44)
  • 第三章认识Node.js模块化开发

    目录 认识Node.js 概述 作用 基本使用 Node.js的运行 Node.js的组成 Node.js的语法 Node.js全局对象 认识模块化开发 概述 场景 特点 模块成员的导入和导出 Node.js 模块化语法 导入模块 导出模块 ES6 模块化语法 导入模块 导出模块 项目 认识Node.js 概述 Node.js是一个 开源的、跨平台 的

    2024年02月06日
    浏览(42)
  • 第四章认识Node.js模块化开发

    Node.js系统模块 续上一篇文章第三章认识Node.js模块化开发-CSDN博客,这次继续来认识和总结以下node的常用模块开发 Node.js系统模块是指Node.js自带的一些模块,这些模块可以直接在Node.js中使用,无需安装其他包。以下是常用的Node.js系统模块: fs模块:用于处理文件系统。 htt

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包