让我们看看下一种情况:
如果创建用户,则必须为该用户创建一个新客户端,一个新用户以及一个新的初始项目。
db = {
users: {},
clients: {},
projects: {}
};
const usersRef = firebase.database().ref("/users");
const clientsRef = firebase.database().ref("/clients");
const projectsRef = firebase.database().ref("/projects");
为了保持代码的清洁和分离,我们可以创建三个函数:
const newUserToDb = name => {
const newUser = usersRef.push();
newUser.set({name});
};
const newClientToDb = name => {
const newClient = clientsRef.push();
newClient.set({name});
};
const newProjectToDb = name => {
const newProject = projectsRef.push();
newProject.set({name});
};
const createUserToDb = (userName, clientName, projectName) => {
newUserToDb(userName);
newClientToDb(clientName);
newProjectToDb(projectName);
};
将所有更改集中在一处,但使代码的分隔性降低:
const createUserToDb = (userName, clientName, projectName) => {
const userId = usersRef.push().key;
const clientId = clientsRef.push().key;
const projectId = projectsRef.push().key;
const updates = {};
updates[`/users/${userId}`] = userName;
updates[`/clients/${clientId}`] = clientName;
updates[`/projects/${projectId}`] = projectName;
firebase.database().ref().update(updates);
};
上述两种解决方案之间是否有重要区别?哪个更有效率?
答案 0 :(得分:2)
与上述方法的重要区别在于原子性。在第一种情况下,单个集合或文档更新将成功或失败而不会影响其他更新。在第二种情况下,所有更新将成功,否则将不会。
我不认为效率是用于比较上述情况的正确术语,它是业务/用例的更多部分,它将定义您需要使用的那一个
答案 1 :(得分:1)
第一种方法似乎更加分离和明确,这可能会使其他开发人员更容易理解。