オブジェクトのリストを含む Web サービスを作成する必要があります。1 つのリストには、多くのタイプのオブジェクトを含めることができます。たとえば、ここにメディア アイテムのライブラリがあります。各アイテムは、リンクまたはビデオのいずれかであり、それぞれに独自のメタデータがあります。
WAR にコンパイルするものが必要で、以前に Lift を使用したことがあるからです。
この種のストレージに MongoDB を使用すると、定義上、異種アイテムのコレクションを処理できるはずなので、うまくいくと思いました。
Lift レコードに格納する BSON オブジェクトのタイプを定義することはできますが、1 つのレコード/コレクションに 1 つのタイプのオブジェクトのみを作成することに固執することはできないようです。理想的には、ライブラリ内の各「もの」(適切な言葉がないため) をビデオまたはリンクにしたいと考えています。例えば:
[
{
"type" : "Video",
"title" : "Story",
"videoID" : "123ab4",
"description": "Feature-length epic",
"time" : 12.6
},
{
"type" : "link",
"url" : "http://www.google.com",
"title": "Search for stuff"
}
]
適切なタイプの継承でそれを実行できるはずですが、すべてのレコード オブジェクトの親がオブジェクトから継承する方法に戸惑います。これを機能させることはできますか?Lift がそのように使用できるさまざまなもののコレクションをお持ちですか?
これが私がこれまでに持っているものです。私はそれをテストしていませんが、それが機能したとしても、私が望むものではありません。
import net.liftweb.record._
import net.liftweb.record.field._
import net.liftweb.mongodb._
import net.liftweb.mongodb.record._
import net.liftweb.mongodb.record.field._
class VideoShelf private () extends BsonRecord[VideoShelf] {
def meta = VideoShelf
object title extends StringField (this, 256)
object videoID extends StringField (this, 32 )
object description extends StringField (this, 256)
object time extends DecimalField(this, 0 )
}
object VideoShelf extends VideoShelf with BsonMetaRecord[VideoShelf]
class LinkShelf private () extends BsonRecord[LinkShelf] {
def meta = LinkShelf
object url extends StringField(this, 128)
object title extends StringField(this, 256)
}
object LinkShelf extends LinkShelf with BsonMetaRecord[LinkShelf]
class MediaLibrary private () extends MongoRecord[MediaLibrary] with ObjectIdPk[MediaLibrary] {
def meta = MediaLibrary
///////////////////////////////////////
///////////////////////////////////////
// What I want is this record type to
// contain either of these:
///////////////////////////////////////
object videoshelf extends BsonRecordField(this, VideoShelf)
object linkshelf extends BsonRecordField(this, LinkShelf )
}
object MediaLibrary extends MediaLibrary with MongoMetaRecord[MediaLibrary]
どうすればこれを入手できますか?