资讯专栏INFORMATION COLUMN

[译]每位开发者都应该知道SOLID原则

go4it / 2962人阅读

摘要:开闭原则软件实体类,模块,函数应该是可以扩展的,而不是修改。函数并不符合开闭原则,因为一旦有新动物出现,它需要修改代码。

By Chidume Nnamdi | Oct 9, 2018

原文

面向对象的编程类型为软件开发带来了新的设计。

这使开发人员能够在一个类中组合具有相同目的/功能的数据,来实现多带带的一个功能,不必关心整个应用程序如何。

但是,这种面向对象的编程还是会让开发者困惑或者写出来的程序可维护性不好。

为此,Robert C.Martin指定了五项指导方针。遵循这五项指导方针能让开发人员轻松写出可读性和可维护性高的程序

这五个原则被称为S.O.L.I.D原则(首字母缩写词由Michael Feathers派生)。

S:单一责任原则

O:开闭原则

L:里式替换

I:接口隔离

D:依赖反转

我们在下文会详细讨论它们

笔记:本文的大多数例子可能不适合实际应用或不满足实际需求。这一切都取决于您自己的设计和用例。这都不重要,关键是您要了解明白这五项原则。

提示:SOLID原则旨在用于构建模块化、封装、可扩展和可组合组件的软件。Bit是一个帮助你践行这些原则的强大工具:它可以帮助您在团队中大规模地在不同项目中轻松隔离,共享和管理这些组件.来试试吧。

Bit

你也可以在这里学习更多关于SOLID原则和Bit的东西。

 单一责任原则
“......你有一份工作” - Loki来到雷神的Skurge:Ragnarok

一个类只实现一个功能

一个类应该只负责一件事。如果一个类负责超过一件事,就会变得耦合。改功能的时候会影响另外一个功能。

笔记:该原则不仅适用于类,还适用于软件组件和微服务。

举个例子,考虑这个设计:

class Animal {
    constructor(name: string){ }
    getAnimalName() { }
    saveAnimal(a: Animal) { }
}

这个Animal类违反了SRP(单一责任原则)

怎么违反了呢?

SRP明确说明了类只能完成一项功能,这里,我们把两个功能都加上去了:animal数据管理和animal属性管理。构造函数和getAnimalName方法管理Animal的属性,然而,saveAnimal方法管理Animal的数据存储。

这种设计会给以后的开发维护带来什么问题?

如果app的更改会影响数据库的操作。必须会触及并重新编译使用Animal属性的类以使app的更改生效。

你会发现这样的系统缺乏弹性,像多米诺骨牌一样,更改一处会影响其他所有的地方。

让我们遵循SRP原则,我们创建了另外一个用于数据操作的类:

class Animal {
    constructor(name: string){ }
    getAnimalName() { }
}
class AnimalDB {
    getAnimal(a: Animal) { }
    saveAnimal(a: Animal) { }
}

“我们在设计类时,我们应该把相关的功能放在一起,所以当他们需要发生改变时,他们会因为同样的原因而改变。如果是因为不同的原因需要改变它们,我们应该尝试把它们分开。” - Steven Fenton

遵循这些原则让我们的app变得高内聚。

开闭原则
软件实体(类,模块,函数)应该是可以扩展的,而不是修改。

继续看我们的Animal类

class Animal {
    constructor(name: string){ }
    getAnimalName() { }
}

我们想要遍历动物列表并且设置它们的声音。

//...
const animals: Array = [
    new Animal("lion"),
    new Animal("mouse")
];
function AnimalSound(a: Array) {
    for(int i = 0; i <= a.length; i++) {
        if(a[i].name == "lion")
            return "roar";
        if(a[i].name == "mouse")
            return "squeak";
    }
}
AnimalSound(animals);

AnimalSound函数并不符合开闭原则,因为一旦有新动物出现,它需要修改代码。

如果我们加一条蛇进去,

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98809.html

相关文章

  • 前端思考 - 收藏集 - 掘金

    摘要:并尝试用为什么你统计的方式是错的掘金翻译自工程师的文章。正如你期望的,文中的前端开发单一职责原则前端掘金单一职责原则又称单一功能原则,面向对象五个基本原则之一。 单页式应用性能优化 - 首屏数据渐进式预加载 - 前端 - 掘金前言 针对首页和部分页面打开速度慢的问题,我们开始对单页式应用性能进行优化。本文介绍其中一个方案:基于 HTTP Chunk 的首屏数据渐进式预加载方案,该方案总...

    LinkedME2016 评论0 收藏0
  • []为什么前端初学者必须要明白发布订阅模式

    摘要:应用需要正确并合适响应各种网络请求用户操作计时事件和各种延时动作。好了,我们的新流程图画出来了提示城市名称查找不是很复杂,谷歌地图为此提供了非常简单的。形象点表示就是,函数是一等公民。 By Hubert Zub | Oct 3, 2018 原文 当你将关注点从样式,美学和网格系统转移到逻辑,框架和编写JavaScript代码时。一切都开始了,你会发现你处于你的web开发历程中最激动人...

    miqt 评论0 收藏0
  • 4分钟学会网页样式[]

    摘要:编写的内容,就像你目前正在阅读的文章,组成了超过的网页。为这个文本内容添加样式将有一个很长的路要走。添加让我们借这个机会,来提高文本格调。瞧按照网页设计的基本原则,我们在短短几分钟内设计了一个像样的页面。 showImg(https://segmentfault.com/img/bVCrlL); 比方说,你想要在自己网站上分享一个产品,或者是一个作品集,又或者仅仅只是一个灵感。在你发布...

    gaomysion 评论0 收藏0
  • 4分钟学会网页样式[]

    摘要:编写的内容,就像你目前正在阅读的文章,组成了超过的网页。为这个文本内容添加样式将有一个很长的路要走。添加让我们借这个机会,来提高文本格调。瞧按照网页设计的基本原则,我们在短短几分钟内设计了一个像样的页面。 showImg(https://segmentfault.com/img/bVCrlL); 比方说,你想要在自己网站上分享一个产品,或者是一个作品集,又或者仅仅只是一个灵感。在你发布...

    Kylin_Mountain 评论0 收藏0
  • ELSE 技术周刊(2017.10.16期)

    摘要:前端中的计算机领域的通常认为起源于。并对其主要内容作了自己的解读。搬到另一个地区会导致名气降低。年度报告,年最受欢迎的编程语言年上最流行的种编程语言及前十最火热的项目排行榜,分别由及登顶。技术周刊由小组出品,汇聚一周好文章,周刊原文。 showImg(https://segmentfault.com/img/bVWHC4?w=1000&h=710); 本期推荐 反击爬虫,前端工程师的脑...

    0xE7A38A 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<