【发布时间】:2017-08-26 14:19:12
【问题描述】:
Slick codegen 生成一个方便的 Tables.scala,其中包含行和表的所有类。我们喜欢这种方法,因为我们可以使用关系设计并利用我们选择的 SQL 方言的全部功能。
但是,我们正在编写大量样板代码来从我们的 REST API 模型/域 API 模型转换为光滑的 XYZ 行,原因如下:
- Slick 案例类中的参数比域案例类中的更多(这些额外参数是从 REST 资源的路径中提取的)
- 我们不希望将依赖路径的类型暴露给其他层/微服务。他们只需要了解 REST API 模型
- 我们通常将日期和时间类从 java.sql 转换为等效的 java.time
我们可以自动转换,这样我们就不必每次都明确地编写两个转换函数,从领域模型到光滑的案例类,反之亦然。特别是:
如何编写一个泛型函数,在具有相同 HLIST 表示的两个等效案例类之间提供隐式转换?
我们如何在具有不同 HLIST 表示的两个案例类之间编写通用隐式转换,为不同成员提供一组范围内的隐式转换 (java.sql.Timestamp -> java.time.ZonedDateTime)
我们如何编写一个函数来在两个 case 类之间进行转换,其中输出一个具有 Repr = HList1 :: HList2 并且第一个具有 Repr = HList2(即我们如何预先/附加到 HList2从请求中提取的参数?)
【问题讨论】: