在 Node.js 中表示状态的普遍接受模式是什么?

What's the commonly accepted pattern for representing state in Node.js

本文关键字:模式 是什么 js Node 表示 状态      更新时间:2023-09-26

例如,在经典的面向对象编程中,我可能有一个班级学校,它有一个代表学生的字符串数组(不是理想的数据结构,但仅用于说明目的(。 它可能看起来像这样

class School {
    String name;
    String[] students;
}

然后,我可以实例化一堆不同的学校,每所学校都有不同的名称和不同的学生。 这个概念如何转化为 Node.js? 如果我有一个 School 模块,那么整个应用程序之间共享单个实例。我最初的想法是将每所学校表示为 JSON 对象,并基本上传递 JSON,而我通常会传递 School 的实例。 这是正确的想法吗,是否有其他方法?

如果状态应该对外部隐藏(即受保护的属性(,你可以这样做:

SchoolFactory = {
    create: function(name, students) {
        students = students || [];
        // return the accessor methods
        return {
            getName: function() {
                return name;
            },
            addStudent: function(student) {
                students.push(student);
            }
            // add more methods if you need to
        }
    }
}
var school = SchoolFactory.create('Hogwarts');
console.log(school); // will not display the name or students
school.addStudent('Harry');

构造函数和实例:

function School(name, students) {
  this.name = name;
  this.students = students || [];
};
School.prototype.enroll = function (student) {
  if (!~this.students.indexOf(student)) {
    this.students.push(student);
  } else {
    throw new Error("Student '" + student + "' already enrolled in " + this.name);
  }
};
var s = new School("Lakewood");
console.log(s.name);
console.log(s.students);
s.enroll("Me");
console.log(s.students);

我不了解任何模式...但是,如果您喜欢这些模块...可以声明学校模块,并在导出中具有学校类。单个实例不会被共享,因为您将实例化类