使用Shapeless进行域类和光滑生成的案例类转换

时间:2017-04-01 10:06:39

标签: scala slick shapeless

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

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

  1. Slick案例类中的其他参数比域案例类中的其他参数(例如,从REST资源的路径中提取这些附加参数)
  2. 我们不希望将路径相关类型暴露给其他层/微服务。他们只需要知道REST API模型
  3. 我们通常将日期和时间类从java.sql转换为java.time等效的
  4. 我们可以自动化转换,因此我们不必每次都有两个转换函数,从域模型到光滑案例类,反之亦然。特别是:

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

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

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

1 个答案:

答案 0 :(得分:2)

有少数几个库可以使用或阅读源代码来学习。例如https://index.scala-lang.org/davegurnell/bulletin/bulletin/0.7.0