JavaScript 中的 SOLID 原则(一):“S”代表什

2022-04-06  本文已影响0人  一颗小行星_混沌前端

你可能已经了解过一些设计原则或者设计模式,本文主要渐进的讲解了SOLID原则:

相信对比和沉浸式的示例会让你更容易理解SOLID原则,以及如何应用到代码实践中。

这是SOLID的第一篇翻译文章(原文一共五篇),来自hackernoon,作者是serhiirubets,欢迎持续关注。

在本文中,我们将讨论什么是 SOLID 原则,为什么我们应该使用他们和如何在JavaScript中使用他们。

什么是SOLID

SOLID 是 Robert C. Martin 的前五个面向对象设计原则的首字母缩写词。 这些原则的目的是:让你的代码、架构更具可读性、可维护性、灵活性。

单一职责原则(Single Responsibility Principle)

S - 单一职责原则 一个实体应该解决一项特定任务。

当我们的类(函数、组件、服务)做很多东西,那就会得到一堆关联的代码,如果改动一处可能会影响到其他地方,这些地方其实没有相关性。而且这个类很难维护,新增的代码改动可能会影响到其他地方,造成不可预知的问题。可读性也会很差,如果这个文件代码量很大,理解起来会异常痛苦。

我们先来看一端没有使用单一原则的示例:

class Movie {
  constructor(options){
    this.name = options.name;
    this.description = options.description;
    this.rating = options.rating;
  }
  changeDescription (newDescription) {
    this.description = newDescription;
  }
  changeRat ing (newRating) { 
    this.rating = newRating; 
  }
  saveUserToFile() []
  saveUserToDB() []
} 

我们写了一个简单的类Movie,并提供了一个方法来修改描述、评级、保存电影到数据库或文件系统。看上去没有什么问题,但是考虑到未来可能新增的扩展:

那么如何重写代码逻辑来解决这些问题?我们应该先想起使用“单一职责原则”,“单一职责”实际上就是“一个实体解决一个特定的任务”。那再“Movie”类中有什么任务呢?

那我们就可以创建3个类:Movie、DB、FileSystem。

class Movie {
    constructor(options) {
        this.name = options.name ;
        this.description = options.description; 
        this.rating = options.rating;
    }
    changeDescription(newDescription) {
        this.description = newDescription;
    }
    changeRat ing (newRating) {
        this.rating = newRating;
    }
}

class DB {
    constructor(options) {
        this.url = options.url;
        this.loginname = options.loginname;
        this.password = options.password;
    }
    save(data) {}
    delete(id) {}
}

class FileSystem {
    constructor(options) {
        this.name = options.name;
    }
    save(data) {}
    delete(data) {}
}

现在我们有了3个独立的类,每个类只用来完成一个特定的任务。这样分离有以下好处:

欢迎关注微信公众号“混沌前端”

推荐阅读:

基于TypeScript理解程序设计的SOLID原则

clean-code-javascript: SOLID

上一篇下一篇

猜你喜欢

热点阅读