在Scala2.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)
}有一个优雅的解决方案吗?还是必须创建两个相同的案例类?
发布于 2018-09-03 15:43:23
我的建议是为不同的需求编码不同的案例类,但如果您坚持必须在这两种情况之间共享代码,则可能的解决方案是将case类参数化。
case class User[Id[_], Param[_]](_id: Id[String], name: Param[String], age: Param[Int], address: Param[String])然后,为标识类型构造函数和case类的两种用法定义别名。
type Identity[T] = T
type SaveUser = User[Option, Identity]
type UpdateUser = User[Identity, Option]https://stackoverflow.com/questions/52150083
复制相似问题