模块管理的简单实现

模块管理的简单实现方式

Keep It Simple,Stupid

Q&A

1. 为什么会有这个东西?

方便组织你的代码,提高项目的可维护性。一个项目的可维护性高不高,也体现一个程序员的水平,在如今越来越复杂的前端项目,这一点尤为重要。

2. 为什么不用requirejs,seajs等

它们功能强大,但是文件体积是个问题,此外还有就是业务有时候可能没那么复杂,正如开头所说的:keep it simple

3. 以下的实现从哪里来的?

这些借鉴了requirejs,seajs,commonjs等的实现,用于真实的项目,稳定运行,效果不错。

4. 适用场景

  • 移动端页面,将js注入到html页面,这样就不用考虑模块加载的问题,从而节省了很多的代码,在实现上也更为的简单。

  • 如果是多文件加载的话,需要手动执行文件加载顺序,那么其实最好用库来进行依赖管理会好一点。

实现1

(function(global){
    var modules = {};
    var define = function (id,factory) {
        if(!modules[id]){
            modules[id] = {
                id : id,
                factory : factory
            };
        }
    };
    var require = function (id) {
        var module = modules[id];
        if(!module){
            return;
        }

        if(!module.exports){
            module.exports = {};
            module.factory.call(module.exports,require,module.exports,module);
        }

        return module.exports;
    }

    global.define = define;
    global.require = require;
})(this);

使用示例

define('Hello',function(require,exports,module){
    function sayHello() {
        console.log('hello modules');
    }
    module.exports = {
        sayHello : sayHello
    }
});

var Hello = require('Hello');
Hello.sayHello();

实现2

function Module(main,factory){
    var modules = {};
    factory(function(id,factory){
        modules[id] = {
            id : id,
            factory : factory,
        }
    });

    var require = function (id) {
        var module = modules[id];
        if(!module){
            return;
        }

        if(!module.exports){
            module.exports = {};
            module.factory.call(module.exports,require,module.exports,module);
        }
        return module.exports;
    }

    window.require = require;
    return require(main);
}

使用示例

Module('main',function(define){
    define('Hello',function(require,exports,module){
        function sayHello () {
            console.log('hello');
        }
        
        //有效的写法
        module.exports = {
            sayHello : syaHello;
        }

        //或者
        exports.sayHello = sayHello;
    });
    //mian,程序入口
    define('main',function(require,exports,module){
        var Hello = require('Hello');
        Hello.sayHello();
    });
});

实现3

另外一种风格的模块管理

(function(global) {
    var exports = {}; //存储模块暴露的接口
    var modules = {}; // 
    global.define = function (id,factory) {
        modules[id] = factory;
    }
    global.require = function (id) {
        if(exports[id])return exports[id];
        else return (exports = modules[id]());
    }
})(this);

使用示例

define('Hello',function(require,exports,module){
    function sayHello() {
        console.log('hello modules');
    }
    //暴露的接口
    return {
        sayHello : sayHello
    };
});

var Hello = require('Hello');
Hello.sayHello();

实践

有了简易的模块化管理之后,在项目中,我们就可以采取这样的结构

-- proj

-- html
    -- index.html
-- css
-- js
    -- common
        -- module1.js(通用模块1)
        -- module2.js(通用模块2)
    -- page
        -- index.js(页面逻辑)
    -- lib
        -- moduler.js 模块管理库

配合前端构建工具(wepack,grunt,gulp等等),就可以构建一个移动端的页面。

总结

如今的框架非常地多,而且越做越庞大。框架通常考虑通用性,对于精益求精的项目来说,可能有时候也要自己动手去实现一些关键的点,而学习的来源就是这些牛逼的框架。

好的,下面是一个简单的图书管理系统的功能模块实现: 1. 用户管理模块实现: - 用户注册:前端页面提供注册表单,用户填写用户名、密码、邮箱等信息,后端接收表单数据,进行数据校验并将数据存储到数据库中。 - 登录功能:前端页面提供登录表单,用户填写用户名和密码,后端接收表单数据,进行数据校验并验证用户名和密码是否匹配,登录成功后将用户信息存储到Session中。 - 修改密码:前端页面提供修改密码表单,用户填写旧密码和新密码,后端接收表单数据,进行数据校验并验证旧密码是否匹配,如果匹配则将新密码存储到数据库中。 - 个人信息管理前端页面提供个人信息表单,用户填写姓名、联系方式等信息,后端接收表单数据,进行数据校验并将数据存储到数据库中。 - 权限管理管理员可以在后台管理页面对用户进行权限管理,如添加、删除、修改用户权限等。 2. 图书管理模块实现: - 图书添加:管理员在后台管理页面提供图书添加表单,填写图书名称、作者、出版社、ISBN码、价格、分类等信息,后端接收表单数据,进行数据校验并将数据存储到数据库中。 - 图书修改:管理员在后台管理页面提供图书修改表单,填写需要修改的图书信息,后端接收表单数据,进行数据校验并将数据存储到数据库中。 - 图书删除:管理员在后台管理页面提供图书删除功能,选择需要删除的图书进行删除操作。 - 图书查询:用户在前端页面提供图书查询功能,可以根据图书名称、作者、分类等信息进行查询,后端接收查询参数,从数据库中查询数据并返回前端展示。 - 分类管理管理员在后台管理页面提供分类添加、修改、删除功能,后端接收表单数据,进行数据校验并将数据存储到数据库中。 3. 借阅管理模块实现: - 借阅申请:用户在前端页面选择需要借阅的图书,提交借阅申请,后端接收申请数据,进行数据校验并将数据存储到数据库中。 - 借阅记录查询:用户在前端页面提供借阅记录查询功能,可以查询自己的借阅记录,后端接收查询参数,从数据库中查询数据并返回前端展示。 - 归还图书:用户在前端页面提供归还图书功能,选择需要归还的图书进行归还操作,后端接收归还数据,进行数据校验并更新数据库中的借阅记录信息。 4. 统计报表模块实现: - 借阅量统计:管理员在后台管理页面提供借阅量统计功能,后端根据时间范围从数据库中查询借阅记录信息,进行统计并返回前端展示。 - 图书流通情况分析:管理员在后台管理页面提供图书流通情况分析功能,后端根据分类从数据库中查询图书信息和借阅记录信息,进行分析并返回前端展示。 - 用户借阅情况分析:管理员在后台管理页面提供用户借阅情况分析功能,后端根据用户ID从数据库中查询借阅记录信息,进行分析并返回前端展示。 5. 系统设置模块实现: - 系统基本信息设置:管理员在后台管理页面提供系统基本信息设置功能,后端接收表单数据,进行数据校验并更新数据库中的系统基本信息。 - 管理员信息管理管理员在后台管理页面提供管理员信息管理功能,后端接收表单数据,进行数据校验并更新数据库中的管理员信息。 - 日志管理管理员在后台管理页面提供日志管理功能,后端从数据库中查询操作日志信息并返回前端展示。 以上是一个简单的图书管理系统的功能模块实现,具体实现需要根据需求进行细化和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值