2

我有很多领域的案例类,例如:

case class Person(id: Long, name: String, login: String, passwordHash: String, ...)

我也有网页(播放)来编辑Person. 此页面与另一个包含Person页面上显示的字段子集的案例类一起操作:

case class PersonProjection(id: Long, name: String)

有很多这样的投影,并且某些字段(如id)可以用于许多投影

您能否建议我如何PersonProjection从现有实例构建Person和更新现有Person实例PersonProjection

当然,我自己实现了这种转换,但也许有一些针对这种情况的最佳实践?一些图书馆或模式?镜头适合这里吗?

谢谢!

4

2 回答 2

0

一种选择是根据以下Person内容定义PersonProjection

case class Person(proj: PersonProjection, passwordHash: String ...)

然后要么访问 idperson.proj.id等,要么添加辅助方法以Person更方便地访问这些:

case class Person(proj: PersonProjection, passwordHash: String) {
  val id = proj.id
  val name = proj.name
}

Person然后从投影更新就像在实例上调用副本一样简单:

val updated = person.copy(proj = projFromForm)
于 2013-08-27T07:02:00.440 回答
0

由于字段映射是任意的,因此您无法逃避从类到其投影的映射。现在,从类到投影应该很简单,但是,在没有默认值的情况下,反过来可能会更复杂。您是否打算在后备存储中搜索某种 ID,检索原始对象,然后对其他字段执行更新?

如果有什么可以帮助您,它将是 Shapeless 及其同构。

于 2013-08-27T07:37:11.967 回答