【问题标题】:LocalDate and LocalDateTime depend on ZonedDateTime [closed]LocalDate 和 LocalDateTime 取决于 ZonedDateTime [关闭]
【发布时间】:2020-02-05 12:56:47
【问题描述】:

为什么是方法:

public ZonedDateTime atStartOfDay(ZoneId zone) 来自 LocalDate



public ZonedDateTime atZone(ZoneId zone) 来自 LocalDateTime

将依赖项添加到 ZonedDateTime

它们看起来像来自 ZonedDateTime 的“util”方法,实际上是从不应该知道任何信息的类(LocalDateLocalDateTime)创建依赖项时区。

此外,还有很多“实用”方法可以添加到这些类中,以“帮助”时区。

这是架构方面的最佳方法吗?

【问题讨论】:

  • Java中最重要的模块粒度是包,这三个都在java.time,所以看起来问题不大。
  • 当您将来更改接口时,请告诉我包粒度是否对您有那么大的帮助。
  • 所以它是一个 util 方法(它知道如何返回一个 LocalDate 一无所知的对象)。将来,如果您更改甚至删除 ZonedDateTime 您将影响一个什么都没有的类了解它...

标签: java architecture localdate zoneddatetime


【解决方案1】:

虽然我没有设计这些类,也不是读心术,但这是我的猜测。 java.time 的一个主要设计目标是流畅的 API,以一种感觉自然的方式链接方法调用的可能性。例如,您可以这样做

    LocalDate.parse("12/6/2000", DateTimeFormatter.ofPattern("d/M/uuuu"))
            .atStartOfDay(ZoneId.of("Asia/Kolkata"))
            .toInstant()
            .toEpochMilli()

这种方法链接要求从LocalDate.parse() 返回的LocalDate 对象接受对atStartOfDay 的调用。想想如果您必须在 ZonedDateTIme 中使用静态方法,代码会是什么样子:

    ZonedDateTime.ofStartOfDay(LocalDate.parse("12/6/2000", DateTimeFormatter.ofPattern("d/M/uuuu")),
                    ZoneId.of("Asia/Kolkata")))
            .toInstant()
            .toEpochMilli()

阅读起来非常困难。将方法放到实用程序类中没有帮助,代码仍然非常相似。

我明白你的意思:流畅 API 的成本是 LocalDate 依赖于 ZonedDateTime,这是一个无法单独在域内解释/证明的依赖关系。

【讨论】:

  • 谢谢您的回答。我很抱歉这个问题落入了-2,但这不是我的错。我一直在经历人们不喜欢好的问题,而且(更糟糕的是)他们在评价它时不理解它。回答你,正是你所说的, ZonedDateTime 应该是避免依赖的起点。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2017-10-15
  • 2019-01-21
  • 2014-05-24
  • 2020-12-20
  • 2018-12-08
  • 2015-05-30
  • 2021-08-10
  • 2019-09-24
相关资源
最近更新 更多