用另一个更新案例类

时间:2013-08-27 06:44:08

标签: scala

我的案例类有很多字段,如:

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个实例?

当然,我自己实现了这种转变,但也许这种情况有某种最佳实践?一些图书馆或模式?镜片适合吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

一种选择是根据Person

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

然后将id作为person.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)

答案 1 :(得分:0)

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

如果有什么可以帮助你的话,那就是它与同构的无形。