事情是这样的:
- 客户端不应该知道存储库使用的持久化机制
- 例如,当使用 MongoDB 作为持久性存储实现存储库时,检索值是通过异步回调完成的
- 同步调用仍然可以使用回调来实现,异步调用必须使用回调来实现。 (或者 future 等但是我不想去)
对我来说意味着存储库(至少对于获取)应该在接口(interface)中定义一个回调,即使实现恰好是同步的,例如:
var repo = {
cache: {},
getById: function(id,callback){
callback(null,this.cache[id]);
}
}
因为我可能(将)很快将其更改为:
var repo = {
getById: function(id,callback){
mongoose.findOne({_id:id},callback);
}
}
恕我直言,对于 C/U/D,同样的需求主要来自持久层的错误报告。
简而言之:您认为使用异步回调定义存储库(在 Nodejs 中,尽管不是很相关)是最佳实践吗?
最佳答案
如果周围应用程序代码的其余部分也是异步的,我认为这是一个很好的做法。从技术上讲,这当然是一个很好的做法,因为存储库是 IO 绑定(bind)的,并且保持阻塞调用线程是没有意义的。问题是异步回调会导致 continuation-passing style这会导致学习曲线和大多数语言的一定程度的摩擦。
关于node.js - DDD 和 Node.js : Good practice to have a repository with async callbacks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11786413/