[英]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.