私は Play Framework と Squeryl を使用してデータベースのかなり基本的なフロント エンドを作成していますが、コードを書き直しすぎていることはわかっています。データベース内のデータを表すさまざまなモデルがあり、それらはすべて同じ 6 つの機能を実行します
object ModelType{
def add(model:ModelType):Option[ModelType] = Option(AppDB.tablename.insert(model))
def remove(id: Long) = AppDB.tablename.delete(id)
def getAll():List[ModelType] = from(AppDB.tablename)(model => select(model) orderBy(model.aDifferentFieldForEachModel)) toList
def toJson(model:ModelType):JsValue ={
Json.toJson(
Map("field" -> Json.toJson(model.field))
)
}
def allToJson() = {
val json:List[JsValue] = getAll.map{toJson(_)}
Json.toJson(json.toSeq)
}
def validate(different values for each model) = // is fairly different for each one. Validates the submitted fields from a user
}
そのため、モデルごとにケース クラスを使用し、これらのコマンドに付随するオブジェクトを使用しています。scala でジェネリクスまたはトレイトを使用して、これらのメソッドを毎回入力するのではなく、生活を楽にするにはどうすればよいでしょうか?
編集: gzm0 の回答でほとんど解決しましたが、問題は getAll をどのようにトレイトに実装するかです。上記のように、モデルごとにいくつかの変数を保存できるようにしたいと考えていmodel.aDifferentFieldForEachModel
ます。