【发布时间】:2016-01-08 13:54:35
【问题描述】:
有Person模型case class通过REST端点暴露给客户端。
scala> case class Person(firstname: String, lastname: String)
defined class Person
现在内部服务之一想要“丰富”这个Person case class 并向其中添加社会安全号码。但是,丰富只是从一项服务中填充社会安全号码并将其传递给另一项服务。
立即的想法是将ssn 属性添加到Person,如下所示 - 但这是不希望的,因为Person 暴露给端点消费者并且SSN 绝不能对任何调用暴露Person 数据的REST 端点的用户可见.
case class Person(firstname: String, lastname: String, ssn: String)
所以另一个想法是丰富Person案例类如下
scala> implicit class ExtendedPerson(person: Person){
| val SSN : String = ""
| }
defined class ExtendedPerson
那么Service1.findPerson API 将在范围内有implicit 并且将要准备Person 如下
val person = Person(firstName="Joe",lastname="Doe", ssn ="123-456-0000")
然后
Service2.moreWorkWithPerson(person,other arguments)
然后Service2.moreWorkWithPerson 将希望从person 参数中获取ssn=123-456-0000。
在不修改 Person case class 的定义的情况下,在 Scala 中实现此目的的正确方法是什么?无形有帮助吗?任何指针将不胜感激?
【问题讨论】: