[英]Playframework, where to put Json Writes and Reads for reuse?
我有两个编写和读取相同AccountModel
案例类的控制器。 此类是我的“域”对象Account
的适配器,该对象将一些集合展平并将对象引用( Map[Role, Auth]
)转换为显式键引用( Set[AuthModel(rolekey:String, level:Int)]
)。
我想重用此AccountModel
及其隐式的Writes
和Reads
但不知道如何实现“ scala方式”。
我想在一个object Models
中将我的案例类作为内部类以及所有相关的隐式对象,但是我认为这很快将变得难以理解。
您过去经常做什么,将可重用的Json类放在哪里,有什么建议吗?
非常感谢
主要有两种方法。
方法1:将它们放在可序列化对象的伴随对象上:
// in file AccountModel.scala
class AccountModel(...) {
...
}
object AccountModel {
implicit val format: Format[AccountModel] = {...}
}
这样,无论您在AccountModel
导入AccountModel
,格式化程序都将可用,因此所有内容都将无缝运行。
方法2:使用JSON格式化程序准备特征:
// in a separate file AccountModelJSONSupport.scala
import my.cool.package.AccountModel
trait AccountModelJsonSupport {
implicit val format: Format[AccountModel] = {...}
}
使用这种方法,每当需要序列化时,都必须将特征混合在一起,如下所示:
object FirstController extends Controller with AccountModelJsonSupport {
// Format[AccountModel] is available now:
def create = Action(parse.json[AccountModel]) { ... }
}
编辑:我忘了添加两种方法的比较。 我通常会坚持方法1,因为它更直接。 但是,当同一类需要两个不同的格式化程序,或者模型类不是您自己的并且不能修改时,则需要JSONSupport
mixin策略。 感谢您在评论中指出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.