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)
我们如何编写一个函数来在两个案例类之间进行转换,其中输出一个具有 Repr = HList1::HList2,第一个具有 Repr = HList2(即,我们如何在 HList2 前面添加/附加从请求中提取的参数?)
最佳答案
有一些库可以执行此操作,您可以使用它们或阅读源代码来学习。例如https://index.scala-lang.org/davegurnell/bulletin/bulletin/0.7.0
关于scala - 使用 Shapeless 进行域类和灵活生成的案例类转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43155440/