【问题标题】:Domain classes and slick generated case classes conversion with Shapeless使用 Shapeless 进行领域类和光滑生成的案例类转换
【发布时间】:2017-08-26 14:19:12
【问题描述】:

Slick codegen 生成一个方便的 Tables.scala,其中包含行和表的所有类。我们喜欢这种方法,因为我们可以使用关系设计并利用我们选择的 SQL 方言的全部功能。

但是,我们正在编写大量样板代码来从我们的 REST API 模型/域 API 模型转换为光滑的 XYZ 行,原因如下:

  1. Slick 案例类中的参数比域案例类中的更多(这些额外参数是从 REST 资源的路径中提取的)
  2. 我们不希望将依赖路径的类型暴露给其他层/微服务。他们只需要了解 REST API 模型
  3. 我们通常将日期和时间类从 java.sql 转换为等效的 java.time

我们可以自动转换,这样我们就不必每次都明确地编写两个转换函数,从领域模型到光滑的案例类,反之亦然。特别是:

  1. 如何编写一个泛型函数,在具有相同 HLIST 表示的两个等效案例类之间提供隐式转换?

  2. 我们如何在具有不同 HLIST 表示的两个案例类之间编写通用隐式转换,为不同成员提供一组范围内的隐式转换 (java.sql.Timestamp -> java.time.ZonedDateTime)

  3. 我们如何编写一个函数来在两个 case 类之间进行转换,其中输出一个具有 Repr = HList1 :: HList2 并且第一个具有 Repr = HList2(即我们如何预先/附加到 HList2从请求中提取的参数?)

【问题讨论】:

    标签: scala slick shapeless


    【解决方案1】:

    有一些库可以做到这一点,您可以使用或阅读源代码来学习。例如https://index.scala-lang.org/davegurnell/bulletin/bulletin/0.7.0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-17
      • 2015-10-16
      • 2014-08-19
      • 2015-10-16
      • 2015-08-30
      • 2016-12-05
      • 1970-01-01
      • 2018-08-19
      相关资源
      最近更新 更多