为什么需要代码封装
在开发过程中会产生大量的重复性代码,如果不进行代码封装在后期维护需要修改多处,从而导致代码难以维护。
例如下面这段代码
/**
优点
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))