我所理解的SOLID原则

【设计模式】SOLID设计原则 类应该只有一个单一的职责,即一个类应该有且只有一个改变的理由。这意味着一个类应该只负责一个特定的功能或任务,而不是多个不相关的功能。这样做可以提高类的内聚性,并使得类更容易理解、修改和测试。软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。这意味着在不修改现有代码的情况下,应该能够通过添加新的代码来扩展系统的功能。这样做可以使得系统更加稳定,减少修改现有代码可能带来的风险。子类型必须能够替换其基类型。换句话说,任何可以接受基类型的地方都可以接受子类型,而且不会引发意外的行为。 阅读详情

      S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写。

面向对象设计的原则
SRP The Single Responsibility Principle单一职责原则
OCP  The Open Closed Principle开放封闭原则
LSP The Liskov Substitution Principle里氏替换原则
ISP  The Interface Segregation Principle接口分离原则
DIP  The Dependency Inversion Principle依赖倒置原则

一、单一职责原则(SRP)

      从面向对象角度解释这个原则为:"引起类变化的因素永远不要多于一个。" 或者说 "一个类有且仅有一个职责"。这似乎不太好理解,特别是"引起类变化的因素永远不要多于一个。"这句话更是有点虚,让人有点摸不着头脑。

      我们通常都说“低耦合,高内聚”。在我看来,这里的"单一职责"就是我们通常所说的“高内聚”,即一个类只完成它应该完成的职责,不能推诿责任,也不可越殂代疱,不能成为无所不能的上帝类。如果你的团队中实施宽松的“代码集体所有权”,在编码的过程中出现许多人同时修改(维护)同一个类的现象,而且成员之间的沟通不够及时,主动和畅通的话,那么时间一长,就很可能出现“承担过多职责”的上帝类。这时,提炼基类/接口和提炼类重构将能帮助我们消除或减轻这种设计臭味。

看一个例子:


这是一个违反了“单一职责原则” 的类结构图。
这里,Rectangle类做了下面两件事:

  • 计算矩形面积;
  • 在界面(绘制设备)上绘制矩形;
并且,有两个应用使用了Rectangle类:
  • 计算几何应用程序(Computational Geometry Application)用这个类计算面积;
  • 图形程序(Graphical Application)用这个类在界面上绘制矩形;
这违反了SRP(单一职责原则)。因为Rectangle类做了两件事,在一个方法里它计算了面积,在另外一个方法了它返回一个表示矩形的GUI。这会带来一些有趣的问题:在计算几何应用程序中我们必须包含GUI。也就是在开发几何应用时,我们必须引用GUI库;图形应用程序中Rectangle类的变化可能导致计算几何应用程序的变化,编译和测试,反之亦然。那么,怎么修改才能让其符合单一职责原则呢?

答案是:拆分!拆分职责到两个不同的类中,如:

  • Rectangle: 这个类应该只定义Area()方法;
  • RectangleUI: 这个类应继承Rectangle类,并定义Draw()方法。

二、开放封闭原则 (OCP)

        从面向对象设计角度看,这个原则可以这么理解:"软件实体(类,模块,函数等等)应当对扩展开放,对修改闭合。" 通俗来讲,它意味着你(或者类的客户)应当能在不修改一个类的前提下扩展这个类的行为。在OOD里,对扩展开放意味着类或模块的行为能够改变,在需求变化时我们能以新的,不同的方式让模块改变,或者在新的应用中满足需求。

        也就是说,对扩展是开放的,而对修改是封闭的。我们通常都说:向系统中增加功能时应该只是添加新代码,而应该尽量少的修改原代码。在我看来,这就是遵循开放封闭原则所能带来的效果。曾经在网上看到过这样一句话“哪里变化,封装哪里”。这其实就是说,我们要将系统中可能变化的地方封装起来,即对修改封闭。同时,为了应对系统需求(功能)的扩展,需要抽象!

       这里抽象是关键。《设计模式》中的state模式和strategy模式是这个原则的最好体现。

举一个例子:


违反了开放封闭原则的类结构图。

客户端代码直接面向服务器端的具体实现编程,缺乏灵活性。这样如果服务器因为某些原因被其他服务器替换了,那么客户端调用服务器的代码也必须做相应的修改或替换。这其实就是”面向实现编程“的设计臭味!

那么,如何修改才能得到正确灵活的设计?

答案是:抽象!为服务器端的代码(类型)抽象出一个抽象基类(定义一组完成服务职责的最小接口)。

下面是正确的设计:


遵循开放封闭原则的类结构图。

       基本上,你抽象的东西是你系统的核心内容,如果你抽象得好,很可能增加一个新的服务器类型(扩展)只需要添加新类型(继承自AbstractServer即可)。因此代码要尽可能以抽象(这里的AbstractServer)为依据,这会允许你扩展抽象事物,定义一个新的实现而不需要修改任何客户端代码。即”面向接口编程,不要面向实现编程“!

三、Liskov's 替换原则(LSP)

    Liskov's 替换原则意思是:"子类型必须能够替换它们的基类型。"或者换个说法:"使用基类引用的地方必须能使用继承类的对象而不必知道它。" 这个原则正是保证继承能够被正确使用的前提。通常我们都说,“优先使用组合(委托)而不是继承”或者说“只有在确定是 is-a 的关系时才能使用继承”,因为继承经常导致”紧耦合“的设计。
    在基本的面向对象原则里,"继承"通常是"is a"的关系。如果"Developer" 是一个"SoftwareProfessional",那么"Developer"类应当继承"SoftwareProfessional"类。在类设计中"Is a"关系非常重要,但它容易冲昏头脑,导致使用错误的继承造成错误设计。

看一个最最经典的例子:


遵循Liskov替换原则的类结构图。

注:这里,KingFisher(翠鸟)类扩展了Bird基类,并继承了Fly()方法,这没有问题。

但是下面这个类结构图就存在设计上的问题:


违反Liskov替换原则的类结构图。

Ostrich(鸵鸟)是一种鸟,这毋庸置疑,并从Bird类继承,这从概念上说没有问题。但是鸵鸟它能飞吗?不能,那么这个设计就违反了LSP。因为在使用Bird的地方不一定能用Ostrich代替。所以,即使在现实中看起来没问题,在类设计中,Ostrich不应该从Bird类继承,这里应该从Bird中分离一个不会飞的类NoFlyBrid,Ostrich应该继承这个不会飞的鸟类NoFlyBrid。

为什么LSP如此重要?

  • 如果没有LSP,类继承就会混乱;如果子类作为一个参数传递给方法,将会出现未知行为;
  • 如果没有LSP,适用与基类的单元测试将不能成功用于测试子类;

四、接口分离原则(ISP)

      这个原则的意思是"客户端不应该被迫依赖于它们不用的接口。" 也就是说,一个接口或者类应该拥有尽可能少的行为(那么,什么叫尽可能少?就是少到恰好能完成它自身的职责),这也是保证“软件系统模块的粒度尽可能少,以达到高度可重用的目的。

     接口包含太多的方法会降低其可用性,像这种包含了无用方法的"胖接口"会增加类之间的耦合。如果一个类想实现该接口,那么它需要实现所有的方法,尽管有些对它来说可能完全没用,所以这样做会在系统中引入不必要的复杂度,降低代码的可维护性或鲁棒性。

     接口分离原则确保实现的接口有它们共同的职责,它们是明确的,易理解的,可复用的.

下面这个例子充分的说明了”接口应该仅包含必要的方法,而不该包含其它的“。如果一个接口包含了过多的方法,应该通过分离接口将其拆分。


这是一个违反接口分离原则的胖接口。

注意到IBird接口包含很多鸟类的行为,包括Fly()行为.现在如果一个Bird类(如Ostrich)实现了这个接口,那么它需要实现不必要的Fly()行为(Ostrich不会飞)。因此,这个"胖接口"应该拆分成两个不同的接口,IBird和IFlyingBird, 而IFlyingBird继承自IBird。如下图所示:


这样的话,重用将变得非常灵活:如果一种鸟不会飞(如Ostrich),那它实现IBird接口。如果一种鸟会飞(如KingFisher),那么它实现IFlyingBird。

因此,如果我们想要获得可重用的方案,就应当遵循接口分离原则,把接口定义成仅包含必要的部分,以便在任何需要该接口功能的地方复用这个接口。

五、依赖倒置原则(DIP)

         这个原则的意思是:高层模块不应该依赖底层模块,两者都应该依赖其抽象。其实又是”面向接口编程,不要面向实现编程“的内在要求。

我们考虑一个现实中的例子,来看看依赖倒置原则给我们软件带来的好处。 

你的汽车是由很多如引擎,车轮,空调和其它等部件组成,对吗?


注意:这里的 Car 就是高层模块;它依赖于抽象接口IToyotaEngine 和 IEighteenInchWheel.

而具体的引擎FifteenHundredCCEngine 属于底层模块,也依赖于抽象接口IToyotaEngine ;

具体的车轮 EighteenInchWheelWithAlloy同样属于底层模块,也依赖于抽象接口IEighteenInchWheel。

上面Car类有两个属性(引擎和车轮列表),它们都是抽象类型(接口)。引擎和车轮是可插拔的,因为汽车能接受任何实现了声明接口的对象,并且Car类不需要做任何改动。

        除SOLID原则外还有很多其它的面向对象原则。如:

  1. "组合替代继承":这是说相对于继承,要更倾向于使用组合;
  2. "笛米特法则":这是说"你的类对其它类知道的越少越好";
  3. "共同封闭原则":这是说"相关类应该打包在一起";
  4. "稳定抽象原则":这是说"类越稳定,越应该由抽象类组成";
        当然,这些原则并不是孤立存在的,而是紧密联系的,遵循一个原则的同时也就遵循了另外一个或多个原则;反之,违反了其中一个原则也很可能同时就违反了另外一个或多个原则。 设计模式是这些原则在一些特定场景的应用结果。因此,可以把设计模式看作"框架",把OOD原则看作"规范"。 在学习设计模式的过程中,我们要经常性的反思,这个设计模式体现了面向对象设计原则中的哪个或哪一些原则。
      特别是在重构实现模式,或重构趋向模式的过程中,我们更要结合SOLID原则思考代码在重构前后的区别,理解它的改进。我正在研读《重构与模式》一书,因此接下来我会结合例子记录自己的学习体会。
      注:以上图片均来自《如何向妻子解释OOD》译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html
     <How I explained OOD to my wife> 原文链接:http://www.codeproject.com/Articles/93369/How-I-explained-OOD-to-my-wife

又及,还有两个常被提到的原则:

六、合成复用原则(CRP)

合成复用原则(Composite Reuse Principle,CRP),即优先使用委托而不是继承来重用已用功能(代码)。循序这一原则通常也是避免触犯里氏替换原则所要求的。

七、迪米特法则(LoD / LKP)

迪米特法则(Law Of  Demeter)又称最小知识原则(Least Knowledge Principle, LKP)。意思是一个对象应当对其它对象有尽量好的了解,即应该保持对象间有尽量少的相互作用是,使得对象(类)具有好的独立性,可测试性,也就易于维护。

关于“迪米特法则”的其它表述还有:只与你的朋友们通信,不要与“陌生人”说话。

设计模式中的Facade模式和Mediator模式就是使用了这一原则,降低模块间的耦合。


Sentinel-1 Burst数据处理避坑实录:从aria2c报错到wget脚本救场 本文详细介绍了Sentinel-1 Burst数据处理的完整解决方案,从下载困境到高效处理技巧。针对aria2c报错等常见问题,提供了增强版wget脚本和智能分组方法,显著提升下载成功率和处理效率,特别适合科研机构和企业级网络环境下的哨兵数据处理需求。 阅读详情

相关推荐

Unity2018连接MySQL数据库

当前在做的一个Unity项目需要连接到MySQL数据库,弄了一整天,排了很多错,终于在Unity上成功连接到MySQL数据库了,所以分享一下,避免有这个需求的朋友不用花那么多时间。 我使用的软件是 Unity20184.0f1 + mysql-8.0.24 导入 MySql.Data.dll 首先需要把 MySql.Data.dll 导入到Assets/Plugins 这个dll需要安装Connector/NET,在安装目录\Assemblies\v4.0中拿到,最好不要下载版本太高的,版本太高导入的时候

ZLX的博客 9449

程序设计原则之SOLID原则

设计模式中的SOLID原则,分别是单一原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则。前辈们总结出来的,遵循五大原则可以使程序解决紧耦合,更加健壮。 SRP 单一责任原则 OCP 开放封闭原则 LSP 里氏替换原则 ISP 接口隔离原则 DIP 依赖倒置原则 单一责任原则 指的是一个类或者一个方法只做一件事。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化就可能抑制或者削弱这个类完成其他职责的能力。例如餐厅服务员负责把...

Peter的博客 9585

10-Oracle 23 ai Vector Search 概述和参数

企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation :RAG)功能,RAG能够将LLM的生成能力与知识库的精准资料库进行检索结合,将大模型部署在内部同时将私有的数据进行LLM的检索避免泄露企业专用的数据同时提高的准确性。于是如何将数据存入向量数据库以及向量查询等这些基本功能变得必备和重要。

远方的专栏 1294

SOLID原则

SOLID原则是一组设计原则,它们旨在帮助开发人员创建易于维护和可扩展的软件系统,这些原则的缩写代表以下5个原则:1. 单一职责原则(SRP):一个类应该只有一个职责。2. 开闭原则(OCP):软件实体应该对扩展开放,对修改关闭。3. 里式替换原则(LSP):子类应该能够替换其父类并保持系统行为的一致性。4. 接口隔离原则(ISP):客户端不应该依赖于它不使用的接口。5. 依赖反转原则(DIP):高层模块不应该依赖于底层模块,它们应该通过抽象接口进行交互。

zzdnb的博客 1851

Unity UGUI深度优化

Unity UGUI优化相关

不定时分享所学所得,包括游戏开发和其他收获! 2717

大疆mini 3 pro rtmp推流(带屏遥控器不支持)windows

大疆mini 3 pro无人机rtmp推流(带屏遥控器不支持)至windows电脑

xbsigeibwkouvfcj的博客 3430

设计原则——SOLID

设计原则SOLID

qq_40843987的博客 5357

别再手动建模了!用Simscape Multibody Link一键导入SolidWorks装配体到Simulink

本文介绍了如何利用Simscape Multibody Link插件将SolidWorks装配体一键导入Simulink,实现CAD到仿真的无缝衔接。该技术显著提升机械系统设计与控制效率,特别适用于工业机器人、车辆悬架等复杂机构的动力学分析。文章详细解析了插件安装、模型导出优化及仿真验证的全流程,帮助工程师摆脱手动建模的低效工作模式。

weixin_27256197的博客 458

设计模式六大原则(SOLID)

设计模式六大原则(SOLID) Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substitution Principle:里氏替换原则 Law of Demeter:迪米特法则 Interface Segregation Principle:接口隔离原则 Dependence Inversion Principle:依赖倒置原则 把这六个原则的首字母联合起来(两个 L 算做一个)恰好是 SOL

violin0847的博客 1470

告别‘小目标’丢失!手把手复现DNANet红外检测网络(PyTorch版)

本文详细介绍了如何使用PyTorch从零实现DNANet红外小目标检测网络,重点解析了DNIM模块和CSAM注意力机制的设计与实现。通过实战教程,帮助开发者解决红外小目标检测中的特征提取和训练调参难题,适用于军事侦察、安防监控等场景。

weixin_28701593的博客 252

Ansys Circuit新手必看:IBIS模型导入时,Pin Import和Buffer Import到底怎么选?

本文详细解析了Ansys Circuit中IBIS模型导入时Pin Import与Buffer Import的选择策略,帮助SI/PI工程师根据仿真需求做出正确决策。通过对比两种方式的特性差异和应用场景,提供实用的选择指南和性能优化建议,提升信号完整性仿真效率。

weixin_26846533的博客 260

SOLID 原则要这么理解!

而这里的父类的约定,不仅仅指的是语法层面上的约定,还包括实现上的约定。想想看,如果我们把 1、2、3、4、5 放在一起,那么当我们修改了 A 调用方才用到 的 1 方法,此时虽然 B 调用方根本没用到 1 方法,但是调用方 B 也会有发生问题的风险。我们在设计一个类的时候,可以先从粗粒度的类开始设计,等到业务发展到一定规模,我们发现这个粗粒度的类方法和属性太多,且经常修改的时候,我们就可以对这个类进行重构了,将这个类拆分成粒度更细的类,这就是所谓的持续重构。这样就实现了「对拓展开放,对修改封闭」的原则。

Mr. David 专栏 582

基于Simulink的电动汽车电池管理系统热管理优化仿真

电动汽车电池管理系统(Battery Management System, BMS)中的热管理是确保电池性能、安全性和寿命的关键环节。温度过高或过低都会显著影响电池的工作效率和寿命,因此需要对电池组进行精确的热管理。基于MATLAB/Simulink的仿真平台可以用于建模和优化电池热管理系统,包括热分布预测、冷却策略设计以及热平衡控制等。本项目旨在构建一个完整的电动汽车电池热管理优化仿真模型,并通过仿真验证系统的性能。

xiaoheshang_123的博客 462

原来SOLID原则要这么理解!

开闭原则(Open Closed Principle),它的定义是:一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。简单地说:就是当别人要修改软件功能的时候,使得他不能修改我们原有代码,只能新增代码实现软件功能修改的目的。 这听着有点玄乎,我来举个例子吧。 这段代码模拟的是对于水果剥皮的处理程序。如果是苹果,那么是一种拨皮方法;如果是香蕉,则是另一种剥皮方法。如果以后还需要处理其他水果,那么就会在后面加上很多 if else 语句,最终会让整个方法变得又臭又长。如果恰好这个水果中的不同品种有不同的

weixin_45032957的博客 209

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

面试指导:如何展示你对SOLID的深刻理解? 当面试官问:“谈谈你对SOLID原则的理解。”

*单一职责原则(SRP)**是这一切的基础,它保证了我们拆分出的类和模块本身是内聚的、健康的。我会像设计‘插头和插座’一样,让我的业务逻辑(高层模块,比如台灯)依赖于一个抽象接口(插座),而不是一个具体的实现(比如某个特定的发电站)。这样一套组合拳打下来,你不仅清晰地阐述了每个原则,更重要的是,你展示了你知道它们之间的关系、最终的目标,并能结合主流框架来佐证你的观点。在我看来,这五个原则中,开闭原则(OCP)是我们的最终目标,而其他原则,特别是依赖倒置原则(DIP)是实现这个目标最重要的手段。

冷脸萌萌的技术实践 343

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

5 个例子理解透彻 SOLID 原则

摘要 软件设计原则(SOLID)为构建可维护、可扩展的代码提供了重要指导。单一职责原则强调每个类只做一件事;开放封闭原则提倡通过扩展而非修改现有代码来添加功能;里氏替换原则要求子类能够完全替代父类;接口隔离原则避免实现冗余接口方法。通过银行对账单、电商支付等实例分析,本文展示了如何应用这些原则解决代码耦合、扩展性差等问题,从而提高开发效率和系统灵活性。遵循这些原则能显著改善代码质量,降低维护成本。

LoveSummer 762

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

超易懂,原来SOLID原则要这么理解

说到 SOLID 原则,相信有过几年工作经验的朋友都有个大概印象,但就是不知道它具体是什么。甚至有些工作了十几年的朋友,它们对 SOLID 原则的理解也停留在表面。今天我们就来聊聊 SOLID 原则以及它们之间的关系。 什么是SOLID原则 SOLID 原则其实是用来指导软件设计的,它一共分为五条设计原则,分别是: 单一职责原则(SRP) 开闭原则(OCP) 里氏替换原则(LSP) 接口隔离原则(ISP) 依赖倒置原则(DIP) 单一职责原则(SRP) 单一职责原则(Single Respo

JavaShark的博客 616

AI如何帮你轻松理解SOLID原则?

今天想和大家聊聊一个开发中经常遇到的痛点:如何确保自己的代码符合SOLID原则?作为面向对象设计的黄金准则,SOLID原则说起来简单,但在实际项目中往往难以把握。最近我发现用AI工具来辅助分析代码,能事半功倍地解决这个问题。比如单一职责原则,一个类看似只做一件事,但内部可能隐藏着多个耦合的功能点。的AI对话功能时,不需要搭建复杂环境就能快速验证想法,还能一键部署成可分享的在线工具。对于需要持续运行的服务类项目,平台提供的部署功能特别方便,点击按钮就能把分析服务发布上线。生成可视化报告和改进建议。

BlackStone33的博客 357

你对PHP中的SOLID原则有什么理解?

SOLID 是面向对象设计和编程的五个基本原则的首字母缩写。当这些原则被应用于 PHP 或任何其他面向对象的语言时,它们可以帮助开发者创建出更加健壮和可扩展的软件系统。软件实体(类、模块、函数等)应当是可扩展的,但是不可修改的。也就是说,新的功能应该通过添加新代码来实现,而不是通过修改现有的代码。这一原则强调的是基类和子类之间的行为应该是可替换的,而不会破坏程序的正确性。高层模块不应该依赖于低层模块,两者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。客户端不应该被强制依赖于它们不使用的接口。

长风破浪会有时的博客 1046

SOLID 原则理解

SOLID是面向对象设计(OOD)的几条基本原则. Single Responsibility Principle (SRP) Key Points: 同一个class或function只为同一个目的而存在。 Open-Closed Principle Key Points: abstract class, 囊括核心概念部分。 ...

weixin_30532837的博客 132

超易懂!原来 SOLID 原则要这么理解!

点击蓝色 “陈树义” 关注我哟说到 SOLID 原则,相信有过几年工作经验的朋友都有个大概印象,但就是不知道它具体是什么。甚至有些工作了十几年的朋友,它们对 SOLID 原则的理解也停留在...

陈树义 2723

深入理解面向对象设计原则:SOLID 原则

SOLID 是面向对象设计的五大核心原则,由 Robert C. Martin 提出,旨在构建更易维护、扩展的系统。其核心思想包括: 单一职责原则(SRP):一个类只负责一个功能 开闭原则(OCP):通过扩展而非修改实现新功能 里氏替换原则(LSP):子类应能完全替代父类 接口隔离原则(ISP):避免强制依赖无用接口 依赖倒置原则(DIP):高层模块依赖抽象而非实现 这些原则共同降低代码耦合度,提高系统灵活性,是构建健壮软件架构的基础。

经天纬地,格物致理 1988

SOLID设计原则理解

在实际项目中通常不会也不需要用到所有架构原则。团队理解和维护成本更重要。

qq_36201602的博客 415

OOD: 我所理解的SOLID原则

S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写。 面向对象设计的原则 SRP  The Single Responsibility Principle 单一职责原则 OCP   The Open Closed Principle 开放封闭原则 LSP

1170

代码质量标准:深入理解SOLID原则

摘要: 软件开发中的「平庸陷阱」使团队陷入技术债务与低效协作,根源在于短视的交付压力、混乱的代码质量及「知识孤岛」现象。技术管理者需通过规范代码(可读、可维护、文档化)打破恶性循环,避免开发者因低质量代码损害职业声誉。SOLID原则为高质量代码提供核心方法论:单一职责(SRP)、开闭原则(OCP)、里氏替换(LSP)、接口隔离(ISP)和依赖反转(DIP)。例如,通过拆分职责(SRP)和面向抽象编程(DIP),可提升系统扩展性。代码质量是开发者职业发展的「保险」,需长期投资于规范与实践。

tsz520eee的博客 929

理解 SOLID 原则:编写更简洁的 JavaScript 代码

在 JavaScript 中,可通过“依赖注入”实现:将低层模块(如数据库、邮件服务)作为参数传入高层模块,而非硬编码。在 JavaScript 中,继承类时需确保重写的方法符合父类约定(如返回类型、参数格式、行为预期)。在 JavaScript 中,常见应用场景是拆分验证、数据存储、通信等逻辑(如用户注册时,分别处理输入校验、数据库保存、邮件发送)。由罗伯特·C·马丁(Bob 大叔)提出的 SOLID 原则,是五条核心设计准则,能帮助开发者更好地组织代码、减少漏洞,并降低后续修改的难度。

sdgfafg_25的博客 1191
上一篇: Qwt源码解读之QwtPickerMachine类
下一篇: 《重构》读书笔记(一)——序言
e5Max
博客等级 码龄14年 145粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值