问题很简单:从数据库中获取行并将它们传递给接口。这个接口的一个实现会将此数据写入 XML 文件。
我正在寻找一种模式,所以:
- 接口只有一个方法而不是3个:
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) {};
主意
我想出的办法是只定义一个函数:
IBackend.prototype.writeAll = function(callback) {};
然后此接口的实现将callback
传递的 awriteOne
和end
回调作为参数调用,因此它可以用作:
backend.writeAll(function(writeOneCallback, endCallback) {
collection.find().each(function(err, doc){
if (err) throw new Error(err);
writeOneCallback(doc);
});
endCallback();
});
但是,writeOne
andend
回调的传递取决于实现,并没有在接口中指定。所以如果有人知道一个优雅的解决方案,我很想听听:)