请有人解释一下这个模式的例子有什么用吗?
我感到困惑的是,我可以在任何我想要的地方拥有数据库实例,而且我可以灵活地执行任何操作,我错了吗?特别是
发布于 2021-04-24 12:57:14
存储库模式是一种抽象数据访问的策略。
这就像在应用程序和数据之间放置一个通用适配器一样,所以使用什么数据存储技术并不重要。您的应用程序所需要的只是定义了对新项目的操作,它不应该关心它是如何存储的,或者它来自哪里。
而且,没有必要提到更改的所有影响都将从一个地方处理,而不是通过代码级联!
就我个人而言,我喜欢这个设计模式,因为它只允许我在第一步就关心我的业务逻辑,而不是处理各种数据库,除此之外,它还解决了我在编写测试时遇到的大量麻烦!因此,我可以简单地享受模拟版本的操作,而不是顽固地或监视数据库,这可能会让人头疼。
现在让我们用js实现一个示例,它可以像下面的代码一样简单(当然,它是一个简化的示例)
// userRepository.js
const userDb = [];
module.exports = {
insert: async (user) => userDb.push(user),
findAll: async () => userDb,
};
下面是我如何使用这种模式,首先,我在5分钟内编写了如下代码
// 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,并编写真正的数据访问方法,当然,我希望我的所有测试都能通过。
https://stackoverflow.com/questions/67247047
复制相似问题