首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相同案例类不同验证

相同案例类不同验证
EN

Stack Overflow用户
提问于 2018-09-03 12:46:56
回答 1查看 81关注 0票数 0

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

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

代码语言:javascript
复制
case class User(_id: String, name: String, age: Int, address: String)

现在,当/create路径被击中时,我不需要_id,而是需要所有其他字段。

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

只声明Option并不能达到这个目的,因为这样我的/create路线就会被抛出。

即使是扩展案例类也不能无缝地工作(代码有太多的欺骗性)。

如果这样的事情有可能的话,我会很高兴的

代码语言:javascript
复制
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)
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-03 15:43:23

我的建议是为不同的需求编码不同的案例类,但如果您坚持必须在这两种情况之间共享代码,则可能的解决方案是将case类参数化。

代码语言:javascript
复制
case class User[Id[_], Param[_]](_id: Id[String], name: Param[String], age: Param[Int], address: Param[String])

然后,为标识类型构造函数和case类的两种用法定义别名。

代码语言:javascript
复制
type Identity[T] = T
type SaveUser = User[Option, Identity]
type UpdateUser = User[Identity, Option]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52150083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档