相同的案例类不同的验证

问题描述 投票:0回答:1

我在Scala 2.11和akka中尝试做的是有一个案例类,但有两个不同的验证基于哪个路由被击中。

例如,让我们考虑下面的案例类

case class User(_id: String, name: String, age: Int, address: String)

现在当/create路线被击中时,我不需要_id但我需要所有其他领域。

但是当/update路线被击中时,我需要_id和要更新的字段(可能是一个或全部三个)

只宣布Option不起作用,因为那时我的/create路线进行折腾。

甚至扩展案例类也无法真正无缝地工作(代码冗余太多)。

如果像这样的话可能,我会很高兴

case class User(_id: String, name: String, age: Int, address: String)

case class SaveUser() extends User {
    require(name.nonEmpty)
    require(age.nonEmpty)
    require(address.nonEmpty)
}

case class UpdateUser() extends User {
    require(_id.nonEmpty)
}

有一个优雅的解决方案吗?或者我是否必须创建两个相同的案例类?

mongodb scala akka-http case-class spray-json
1个回答
0
投票

我的建议是针对不同的需求编写不同的案例类,但如果你坚持要在这两种情况之间共享代码,可能的解决方案是参数化案例类

case class User[Id[_], Param[_]](_id: Id[String], name: Param[String], age: Param[Int], address: Param[String])

然后为Identity类型构造函数定义别名,并为case类定义两种用法

type Identity[T] = T
type SaveUser = User[Option, Identity]
type UpdateUser = User[Identity, Option]
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.