让我们从维基百科开始:
更正式地说,函数的Demeter法则要求对象O的方法m只能调用以下类型对象的方法:
- O本身
- m的参数
- 在m中创建/实例化的任何对象
- O的直接组件对象
- 一个全局变量,可由O访问,范围为m
规则1:
public class ClassOne {
public void method1() {
method2();
}
public void method2() {
}
}
Run Code Online (Sandbox Code Playgroud)
规则2:
public class ClassOne {
public void method1(ClassTwo classTwo) {
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
Run Code Online (Sandbox Code Playgroud)
规则3:
public class ClassOne {
public void method1() {
ClassTwo classTwo = new ClassTwo();
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
Run Code Online (Sandbox Code Playgroud)
规则4(感谢@juharr):
public class ClassOne …Run Code Online (Sandbox Code Playgroud) 所以我试图为 GridFS 集合创建一个猫鼬模型,但没有成功。
let bucket;
(async () => {
try {
await mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true });
const { db } = mongoose.connection;
bucket = new mongoose.mongo.GridFSBucket(db, { bucketName: 'tracks' });
}
catch(err) {
console.log(err);
}
})();
Run Code Online (Sandbox Code Playgroud)
这是我的课程架构和模型:
const courseSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
tracks: [{
type: mongoose.Types.ObjectId,
ref: 'tracks.files'
}],
});
const Course = mongoose.model('Course', courseSchema);
Run Code Online (Sandbox Code Playgroud)
这是我的曲目模式和模型:
const trackSchema = new mongoose.Schema({
length: { type: Number },
chunkSize: { type: Number },
uploadDate: …Run Code Online (Sandbox Code Playgroud)