0

問題は単純です。データベースから行をフェッチし、それらをインターフェイスに渡します。このインターフェースの 1 つの実装は、このデータを XML ファイルに書き込みます。

私はパターンを探しているので:

  • インターフェイスには 3 つではなく 1 つのメソッドしかありません: beginWrite/ write/endWrite
  • 一度にすべての行をフェッチするのではなく、行ごとにインターフェイスを「フィード」する必要があります。
  • インターフェイスの実装は特定のデータベース ドライバーに依存すべきではないため、mongodb カーソルをインターフェイスに渡したくありません。

インターフェース

function IBackend(implementation){
    // removed code that merges implementation with this interface
    // because it is irrelevant to this question.
}

IBackend.prototype.beginWrite = function(callback) {};

IBackend.prototype.write = function(row, callback) {};

IBackend.prototype.endWrite = function(callback) {};

考え

私が思いついたのは、関数を 1 つだけ定義することでした。

IBackend.prototype.writeAll = function(callback) {};

次に、このインターフェイスの実装は、callback渡された awriteOneおよびendcallback を引数として呼び出すため、次のように使用できます。

backend.writeAll(function(writeOneCallback, endCallback) {
    collection.find().each(function(err, doc){
        if (err) throw new Error(err);
        writeOneCallback(doc);
    });
    endCallback();
});

ただし、writeOneandendコールバックの受け渡しは実装に依存し、インターフェイスでは指定されません。誰かがこれに対するエレガントな解決策を知っているなら、私はそれを聞きたいです:)

4

1 に答える 1