关于代码封装(Date)

为什么需要代码封装

在开发过程中会产生大量的重复性代码,如果不进行代码封装在后期维护需要修改多处,从而导致代码难以维护。

例如下面这段代码

/**
优点
    1.今天时间与明天时间的基本功能
    2.实现了打印年月日周
缺点
    1.无法实现 获取指定时间的今天与明天
    2.重复定义时间对象
    3.获取周代码重复
    4.打印输出代码重复
*/
//获取今天时间
function getTodayDate(){
    var myDate=new Date();
    var today_year=myDate.getFullYear();
    var today_month=myDate.getMonth()+1;
    var today_day=myDate.getDate();
    var today_week=myDate.getDay();
    today_week=today_week !== 0 ? today_week : 7;
    console.log(today_year+"年"+today_month+"月"+today_day+"日"+"周"+today_week)
}
//获取明天的时间
function getTomorrowDate(){
    var myDate=new Date();
    //setDate把Date对象设置为明天的时间
    myDate.setDate(myDate.getDate()+1);
    var tomorrow_year=myDate.getFullYear();
    var tomorrow_month=myDate.getMonth()+1;
    var tomorrow_day=myDate.getDate();
    var tomorrow_week=myDate.getDay();
    tomorrow_week=tomorrow_week !== 0 ? tomorrow_week : 7;
    console.log(tomorrow_year+"年"+tomorrow_month+"月"+tomorrow_day+"日"+"周"+tomorrow_week);
}
如何进行代码封装及调用
高内聚低耦合
  • 高内聚

    是对系统中元素职责的相关性和集中度的量度。如果元素有高度的相关职责,除了这些职责在没有其他的工作,那么该元素就有高内聚。

  • 低耦合

    耦合就是元素与元素之间的连接,感知和依赖量度。这里说的元素即是功能,对象,系统,子系统。模块。

下面我们来重构上面的代码,但这之前我们要分析上部分代码的实现与如何拆分

代码实现方法
  • 当前时间的今天
  • 当前时间的明天
  • 获取当前时间的星期
  • 时间对象的可视化输出

上面面代码实现中有一个不合理的地方,难道我只能获取当前时间么。那么我想获取指定时间的昨天和今天应该怎么做呢。所以我们应该获取传入时间的今天与明天

  • 传入时间的今天
  • 传入时间的明天
  • 获取传入时间的星期
  • 时间对象的可视化输出
方法拆分
  • getTodayDate (获取传入时间的今天)
    • 参数
      • _date [类型 Date] (传入对象)
    • 返回值
      • _date [类型 Date] (处理后的时间)
  • getTomorrowDate (获取传入时间的明天天)
    • 参数
      • _date [类型 Date] (传入对象)
    • 返回值
      • _date [类型 Date] (处理后的时间)
  • getDateWeek (获取传入时间的星期)
    • 参数
      • _date [类型 Date] (传入对象)
    • 返回值
      • _week [类型 Number] (返回星期几)
  • dateConsole (格式化输出时间)
    • 参数
      • _date [类型 Date] (Date对象)
    • 返回值(无)
构造方法
//获取传入日期今天的时间
function getTodayDate(){
    
}

//获取传入日期明天的时间
function getTomorrowDate(){
    
}

//获取传入日期的星期
function getDateWeek(){
    
}

//格式化输出时间
function dateConsole(){
    
}

构造方法增加传入值与返回值
//获取传入日期今天的时间
function getTodayDate(_date){
    return _date
}

//获取传入日期明天的时间
function getTomorrowDate(_date){
    return _date
}

//获取传入日期的星期
function getDateWeek(_date){
    // 此处的_week 需要重新定义在下一步会实现 这一步先注释即可
    //return _week
}

//格式化输出时间
function dateConsole(_date){
    // 此方法是输出方法所以没有返回值
}

方法逻辑填充
//获取传入日期今天的时间
function getTodayDate(_date){
    // 传入时间的今天 就是传入时间 所以不需要任何处理
    return _date
}

//获取传入日期明天的时间
function getTomorrowDate(_date){
    //获取明天的时间就是 设置传入时间天 天+1
    _date.setDate(_date.getDate()+1);
    return _date
}

//获取传入日期的星期
function getDateWeek(_date){
    // 定义_week 并获取传入时间的星期
    let _week= _date.getDay()
    // 星期为 0 1 2 3 4 5 6  0是星期天,这里用三目运算重新赋值
    _week = _week !== 0 ? _week : 7
    return _week
}

//格式化输出时间
function dateConsole(_date){
    var _year=_date.getFullYear();
    var _month=_date.getMonth()+1;
    var _day=_date.getDate();
    // 上面已经定义了获取星期的方法 所以这里直接调用上面的方法就可以
    var _week=getDateWeek(_date);
    // 此方法是输出方法所以没有返回值,所以直接输出即可
    console.log(_year+"年"+_month+"月"+_day+"日"+"周"+_week);
}
方法调用及使用
//获取传入日期今天的时间
function getTodayDate(_date){
    // 传入时间的今天 就是传入时间 所以不需要任何处理
    return _date
}

//获取传入日期明天的时间
function getTomorrowDate(_date){
    //获取明天的时间就是 设置传入时间天 天+1
    _date.setDate(_date.getDate()+1);
    return _date
}

//获取传入日期的星期
function getDateWeek(_date){
    // 定义_week 并获取传入时间的星期
    let _week= _date.getDay()
    // 星期为 0 1 2 3 4 5 6  0是星期天,这里用三目运算重新赋值
    _week = _week !== 0 ? _week : 7
    return _week
}

//格式化输出时间
function dateConsole(_date){
    var _year=_date.getFullYear();
    var _month=_date.getMonth()+1;
    var _day=_date.getDate();
    // 上面已经定义了获取星期的方法 所以这里直接调用上面的方法就可以
    var _week=getDateWeek(_date);
    // 此方法是输出方法所以没有返回值,所以直接输出即可
    console.log(_year+"年"+_month+"月"+_day+"日"+"周"+_week);
}

// 定义一个时间
let tmp_date=new Date()

// 获取今天的时间对象 返回的也是时间对象
let today_date=getTodayDate(tmp_date)
// 输出今天的时间
dateConsole(today_date)

//实际上可以简化一下上面的代码  已知getTodayDate 返回的是时间对象且 dateConsole 接收的参数也是时间对象 所以可以这样写
dateConsole(getTodayDate(tmp_date))

// 获取明天并输出
dateConsole(getTomorrowDate(tmp_date))

代码优化

上面的代码中 getTodayDate 并没有做任何的时间处理 所以这个方法可以不用,下面是优化过后的代码

//获取传入日期今天的时间 这个方法没有任何意义所以应该删除
//function getTodayDate(_date){
    // 传入时间的今天 就是传入时间 所以不需要任何处理
//    return _date
//}

//获取传入日期明天的时间
function getTomorrowDate(_date){
    //获取明天的时间就是 设置传入时间天 天+1
    _date.setDate(_date.getDate()+1);
    return _date
}

//获取传入日期的星期
function getDateWeek(_date){
    // 定义_week 并获取传入时间的星期
    let _week= _date.getDay()
    // 星期为 0 1 2 3 4 5 6  0是星期天,这里用三目运算重新赋值
    _week = _week !== 0 ? _week : 7
    return _week
}

//格式化输出时间
function dateConsole(_date){
    var _year=_date.getFullYear();
    var _month=_date.getMonth()+1;
    var _day=_date.getDate();
    // 上面已经定义了获取星期的方法 所以这里直接调用上面的方法就可以
    var _week=getDateWeek(_date);
    // 此方法是输出方法所以没有返回值,所以直接输出即可
    console.log(_year+"年"+_month+"月"+_day+"日"+"周"+_week);
}

// 定义一个时间
let tmp_date=new Date()
// 获取今天并且输出 实际上tmp_date就是今天 所以直接格式化输出
dateConsole(tmp_date)
// 获取明天并输出
dateConsole(getTomorrowDate(tmp_date))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵忠洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值