你可能曾经理解过一些设计准则或者设计模式,本文次要渐进的解说了SOLID准则:
- 不应用SOLID是怎么编写代码的,存在什么问题?
- 应该应用SOLID中的哪个准则?
- 应用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,并提供了一个办法来批改形容、评级、保留电影到数据库或文件系统。看上去没有什么问题,然而思考到将来可能新增的扩大:
- 咱们可能会增加一些新的办法,比方:从数据库中获取一部电影的数据,在保留电影的时候进行验证,从数据库中删除电影等,咱们的类将会是“God Object”反模式(“上帝模式”:一个类做了太多事件,或者把很多不相干的逻辑放到了一个类中来实现)。
- 咱们可能会批改一个办法,很大概率上会影响其余中央。
- 反复的代码。咱们可能还有其余的类,比方Audio或Picture,这些类可能也会应用相似的数据库、文件系统、和验证办法,咱们应该怎么做呢?第一个想法可能是在每个类(Audio、Picture、Movie)中去写同样的办法,这刚好就是第二个反模式“DRY”(Don't repeat yourself.)。而且如果零碎中包含很多类,每个类都有本人的办法,当做调整的时候大概率会遗记批改某个类的逻辑,这就会造成问题。
- 更难了解和保护。
那么如何重写代码逻辑来解决这些问题?咱们应该先想起应用“繁多职责准则”,“繁多职责”实际上就是“一个实体解决一个特定的工作”。那在“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个独立的类,每个类只用来实现一个特定的工作。这样拆散有以下益处:
- DRY准则。咱们不须要再反复DB(文件)的逻辑,能够把任何实体(音乐、图片)传递给DB类,类会将他们保留到DB。
- 代码可读性更好,逻辑更简略。
- 没有了“God Object”
欢送关注微信公众号"混沌前端"
举荐浏览:
基于TypeScript了解程序设计的SOLID准则
clean-code-javascript: SOLID