node.js - DDD 和 Node.js : Good practice to have a repository with async callbacks?

标签 node.js asynchronous repository domain-driven-design

事情是这样的:

  • 客户端不应该知道存储库使用的持久化机制
  • 例如,当使用 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/

相关文章:

javascript - 在 sails js 中,我们应该将 mongoDB 数据库计算应用程序插入 POST Controller 吗?

c++ - 带有 NodeJS 订阅者的 ZMQ 发布者服务器

node.js - 在 Sequelize 模型中处理关系的正确方法

ios - 异步加载和 UITableView 的 -reloadData

javascript - 如何以同步方式执行剪贴板复制、窗口打开、事件处理程序和 setInterval?

linux - gitignore 是否支持正则表达式

entity-framework - 不需要在 EF 中配置 DataContext/ObjectContext?

eclipse - 是否有任何 Ubuntu 10.04 存储库可以下载最新版本的 Eclipse?

javascript - 将 $or 与 $elemMatch 和数组外部的条件一起使用

java - 在 Java 中连续处理异步队列的最佳方法是什么?