介绍
绝不应该有一个班级改变的原因。
这意味着每个班级或对象应该有一个责任做某事。
内容
我们查看下面的示例:
function Question(questions) {
this.questions = questions;
this.printReport = () => {
console.log("Printer called");
console.log("3th party printer function called");
};
this.saveDatabase = (questions) => {
console.log({questions});
console.log(`Saved to database`);
};
this.remove = (question) => {
console.log("removed question " + question);
this.questions = this.questions.filter(q => q !== question);
this.saveDatabase(this.questions);
}
this.add = (question) => {
console.log("added " + question);
this.questions.push(question);
this.saveDatabase(this.questions);
}
}
const q = new Question([
"Question 1",
"Question 2",
"Question 3",
"Question 4"
]);
q.remove("Question 1");
q.printReport();
q.add("Question 5");
q.printReport();
Question
对象的目的是处理问题作为保存,列出,删除问题和打印的问题。在这种方法中,问题是printReport
,saveDatabase
,remove
函数以及系统的机制日志-console.log
。
在上下文中,我们将saveDatabase
的方法从Postgres更改为MongoDB,因此我们将更改对象引用的所有函数以保存数据方法。 printReport
,remove
和console.log
与那样。
因此,在后来轻松维护和重新计算。 SRP的任务将应用程序分为小块,每件作品都应该有做某事的任务 - 我认为。
现在,查看下面的新代码:
function printer(data) {
console.log("3th party function called");
log(`[${new Date().toLocaleString()}]--------------------------------`);
log(data, "info");
}
function log(message, type = "log") {
console?.[type](message);
}
function saveDatabase(data) {
log({data}, "info");
log(`Saved data to database`, "info");
}
function Question(questions) {
this.questions = questions;
this.printReport = () => {
printer(this.questions);
};
this.remove = (question) => {
log("removed question " + question);
this.questions = this.questions.filter(q => q !== question);
saveDatabase(this.questions);
}
this.add = (question) => {
log("added " + question);
this.questions.push(question);
saveDatabase(this.questions);
}
}
const q = new Question([
"Question 1",
"Question 2",
"Question 3",
"Question 4"
]);
q.remove("Question 1");
q.printReport();
q.add("Question 5");
q.printReport();
printReport
,saveDatabase
,log
函数移动到其他对象,实现remove
方法。因此,现在每个功能都做一件事。如果每个功能都更改逻辑,我们只能转到此功能,并根据另一个要求进行/更改逻辑,而无需修改其他功能并防止意外的错误。
概括
单一责任原则是创建应用程序的重要原则。我们易于维护/实现,并防止系统变化的意外副作用。
谢谢您的阅读。
祝您有美好的一天ð。