代码之家  ›  专栏  ›  技术社区  ›  sarora

初始化日期时间值同时避免代码重复的最佳实践

  •  0
  • sarora  · 技术社区  · 7 年前

    在我的项目中,我有许多调度任务函数依赖于许多方便变量的日期时间值,例如,想象10+行如下:

    let today = moment(),
      yesterday = moment().subtract(1, 'days'),
      startOfToday = moment(today).startOf("day"),
      endOfToday = moment(today).endOf("day");
    

    我不能将这种初始化代码放在myCode.js文件的顶部,因为它会导致一个bug——myCode.js中的函数将引用过时的datetimes。e、 g.今天总是指节点服务器启动的日期和时间。

    目前我正在初始化每个函数中的日期,但这会导致代码重复。

    有没有更干净的方法?

    我正在考虑的选择:

    b) 内联moment.js datetime值,并完全去掉方便变量(可以工作,但会使代码更难阅读)。

    感谢您的提示,

    谢谢,

    1 回复  |  直到 7 年前
        1
  •  1
  •   Akrion    7 年前

    一种方法是创建一个 util

    因为你的输出总是日期,你可以有一个 getDate

    getDate('yesterday')
    getDate('endOfToday')
    

    通过这种方式,您尝试执行的操作非常可读,在该utils模块中,您可以简单地拥有一个switch语句,它基于字符串返回正确的日期输出:

    switch(dateString) {
      case 'today':
         return moment()
      case 'yesterday':
         return moment().subtract(1, 'days')
    ...
    }
    

    如果你不喜欢路过 strings frozen class in ES6 模拟 enumeration 把它传过去。

    factory pattern