首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储库模式-- node.js中的实际用例及实现

存储库模式-- node.js中的实际用例及实现
EN

Stack Overflow用户
提问于 2021-04-24 20:14:45
回答 1查看 5.9K关注 0票数 2

请有人解释一下这个模式的例子有什么用吗?

我感到困惑的是,我可以在任何我想要的地方拥有数据库实例,而且我可以灵活地执行任何操作,我错了吗?特别是

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-24 20:57:14

存储库模式是一种抽象数据访问的策略。

这就像在应用程序和数据之间放置一个通用适配器一样,所以使用什么数据存储技术并不重要。您的应用程序所需要的只是定义了对新项目的操作,它不应该关心它是如何存储的,或者它来自哪里。

而且,没有必要提到更改的所有影响都将从一个地方处理,而不是通过代码级联!

就我个人而言,我喜欢这个设计模式,因为它只允许我在第一步就关心我的业务逻辑,而不是处理各种数据库,除此之外,它还解决了我在编写测试时遇到的大量麻烦!因此,我可以简单地享受模拟版本的操作,而不是顽固地或监视数据库,这可能会让人头疼。

现在让我们用js实现一个示例,它可以像下面的代码一样简单(当然,它是一个简化的示例)

代码语言:javascript
运行
复制
// userRepository.js
const userDb = [];

module.exports = {
  insert: async (user) => userDb.push(user),
  findAll: async () => userDb,
};

下面是我如何使用这种模式,首先,我在5分钟内编写了如下代码

代码语言:javascript
运行
复制
// userRepository.js
const userDb = new Map();

module.exports = Object.freeze({
  findById: async (id) => userDb.get(id),
  insert: async (user) => userDb.set(user.id, user),
  findAll: async () => Array.from(userDb.values()),
  removeById: async (id) => userDb.delete(id),
  update: async (updatedUser) => {
    if (!userDb.has(updatedUser.id)) throw new Error('user not found');
    userDb.set(updatedUser.id, { ...userDb.get(updatedUser.id), ...updatedUser });
  },
});

然后,我开始为刚刚编写的存储库和业务用例等…编写单元测试。

任何时候,只要我能简单地使用一个真正的数据库,我就会感到满意,因为它只是一个IO机制,不是吗?:)所以在上面的代码中,我将用一个真实的数据库替换userDb,并编写真正的数据访问方法,当然,我希望我的所有测试都能通过。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67247047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档