0

NoSQL / ドキュメント DB にポリモーフィック オブジェクトを実装したいですか? ベストプラクティスとは?

例: マスター クラス アイテム オブジェクト(すべて Item.Title、Item.Subtitle、Item.IconURL を持つ必要があります)

サブクラス: ItemPhoto、ItemPDF、ItemURL、ItemHTML (各サブクラスには異なるプロパティがあります)

すべてのアイテムを一般的にリストしたいのですが、ドリルダウンすると特定のデータを取得できます。

可能なオプション:

2 つの異なるドキュメントを保存 - マスター/子のタイプと ID を使用 内部アイテム オブジェクトを使用してすべてをサブクラス ドキュメントとして保存

その他のオプション??

ありがとう

4

1 に答える 1

1

CouchDB は、クラス (コードを含むデータ) ではなく、ドキュメント (データ) を格納します。ドキュメントを処理する map、validation、list、および show 関数のコードがありますが、これらのドキュメントはデータのみを運ぶプレーンなオブジェクトです。

あなたの例では、ライブラリ関数を定義して、特定のドキュメントにアイテムのデータが含まれていることを確認し、この関数を使用して何をすべきかを決定できます。例えば:

// in a "appTypes" library:
exports.isItem = function(doc) {
  return doc.Title && doc.Subtitle && doc.IconURL;
}

// in a map function
function(doc) {
  var appTypes = require('appTypes');
  if (appTypes.isItem(doc)) {
    // doc is an Item...
  }
}

明らかに、Item に属するすべてのコードを Item クラスに配置し、そのクラスのインスタンスをドキュメント内のデータで初期化して作成できます。しかし、それはあなたの選択であり、CouchDB がドキュメントを処理する方法は変わりません。

于 2012-08-24T13:46:09.953 に答える