软件开发中的 DRY、KISS 和 SOLID 原则

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDSClaw,2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: **软件开发中的DRY、KISS和SOLID原则概览**- **DRY (Don't Repeat Yourself)**: 避免代码重复,确保每项知识在系统中有唯一表示,减少冗余,提高可维护性。例如,通过封装重复逻辑到函数或类。

软件开发中的 DRY、KISS 和 SOLID 原则

DRY (Don't Repeat Yourself)

  • 含义: "不要重复自己"
  • 解释: 每一piece of knowledge在系统中应该只有一个明确的、权威的表示。
  • 目的: 减少重复代码,提高可维护性。
  • 示例: 使用函数或类来封装重复使用的代码逻辑。

代码示例

python

代码解读

复制代码

# DRY (Don't Repeat Yourself) 原则示例

# 违反DRY原则的代码
def get_area_circle(radius):
    return 3.14 * radius * radius

def get_area_cylinder(radius, height):
    return 2 * 3.14 * radius * height + 2 * 3.14 * radius * radius

# 遵循DRY原则的代码
import math

def get_circle_area(radius):
    return math.pi * radius ** 2

def get_cylinder_area(radius, height):
    circle_area = get_circle_area(radius)
    return 2 * math.pi * radius * height + 2 * circle_area

KISS (Keep It Simple, Stupid)

  • 含义: "保持简单,傻瓜"
  • 解释: 系统应该尽可能简单,避免不必要的复杂性。
  • 目的: 提高代码可读性和可维护性,减少错误。
  • 示例: 使用清晰、直接的代码实现,而不是过度设计的复杂解决方案。

代码示例

python

代码解读

复制代码

# 违反KISS原则的代码
def is_even(num):
    if num % 2 == 0:
        return True
    else:
        return False

# 遵循KISS原则的代码
def is_even(num):
    return num % 2 == 0

SOLID

SOLID 是面向对象编程和设计的五个基本原则的首字母缩写:

  1. S - 单一职责原则 (Single Responsibility Principle)
  • 一个类应该只有一个引起它变化的原因。
  • 目的: 提高内聚性,降低耦合度。
  1. O - 开放封闭原则 (Open-Closed Principle)
  • 软件实体应该对扩展开放,对修改关闭。
  • 目的: 增加新功能时不影响现有代码。
  1. L - 里氏替换原则 (Liskov Substitution Principle)
  • 子类型必须能够替换它们的基类型。
  • 目的: 确保继承正确使用,维护系统的一致性。
  1. I - 接口隔离原则 (Interface Segregation Principle)
  • 客户端不应该依赖它不使用的接口。
  • 目的: 避免"胖"接口,提高代码的灵活性和可维护性。
  1. D - 依赖倒置原则 (Dependency Inversion Principle)
  • 高层模块不应该依赖低层模块,两者都应该依赖于抽象。
  • 目的: 降低模块间的耦合度,提高系统的灵活性。

SOLID 原则示例

python

代码解读

复制代码


# 单一职责原则 (SRP)
class Report:
    def generate_report(self, data):
        # 生成报告逻辑
        pass

class ReportPrinter:
    def print_report(self, report):
        # 打印报告逻辑
        pass

# 开放封闭原则 (OCP)
from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return math.pi * self.radius ** 2

# 里氏替换原则 (LSP)
class Bird:
    def fly(self):
        pass

class Sparrow(Bird):
    def fly(self):
        print("Sparrow flying")

class Ostrich(Bird):
    def fly(self):
        raise NotImplementedError("Ostriches can't fly")

# 更好的设计
class Bird:
    pass

class FlyingBird(Bird):
    def fly(self):
        pass

class Sparrow(FlyingBird):
    def fly(self):
        print("Sparrow flying")

class Ostrich(Bird):
    pass

# 接口隔离原则 (ISP)
from abc import ABC, abstractmethod

class Printer(ABC):
    @abstractmethod
    def print(self, document):
        pass

class Scanner(ABC):
    @abstractmethod
    def scan(self, document):
        pass

class ModernPrinter(Printer, Scanner):
    def print(self, document):
        print("Printing:", document)

    def scan(self, document):
        print("Scanning:", document)

# 依赖倒置原则 (DIP)
class LightBulb:
    def turn_on(self):
        print("LightBulb: turned on")

    def turn_off(self):
        print("LightBulb: turned off")

class ElectricPowerSwitch:
    def __init__(self, device):
        self.device = device
        self.on = False

    def press(self):
        if self.on:
            self.device.turn_off()
            self.on = False
        else:
            self.device.turn_on()
            self.on = True

# 使用
bulb = LightBulb()
switch = ElectricPowerSwitch(bulb)
switch.press()
switch.press()

遵循这些原则可以帮助开发者创建更加健壮、灵活和可维护的软件系统。

这些原则是软件开发中的重要指导方针,它们帮助开发者创建高质量的代码和系统架构。简要总结一下每个原则的核心思想:

  1. DRY原则强调避免代码重复,通过重用来提高代码的可维护性。
  2. KISS原则提倡简单设计,避免过度复杂化,使代码更容易理解和维护。
  3. SOLID原则是一套面向对象设计的指导原则,旨在使软件设计更加灵活、可理解、可维护和可扩展。

这些原则不是硬性规则,而是指导方针。在实际开发中,应该根据具体情况灵活应用这些原则,以达到最佳的设计效果。


转载来源:https://juejin.cn/post/7382987557543411712

相关文章
|
JSON 前端开发 Java
SpringMVC系列(二)之常用注解介绍及参数传递说明
SpringMVC系列(二)之常用注解介绍及参数传递说明
|
7月前
|
数据采集 数据可视化 物联网
数据工程师必看:10大主流数据清洗工具全方位功能对比
面对杂乱数据,高效清洗是分析关键。本文盘点10款主流工具:从企业级Informatica、Talend,到业务友好的Alteryx、Tableau Prep,技术向的Python、Nifi,再到轻量级Excel+Power Query,覆盖各类场景。帮你选对工具,提升效率,告别无效加班。
数据工程师必看:10大主流数据清洗工具全方位功能对比
|
机器学习/深度学习 算法 安全
从量子芯片到纠错的漫长征途:量子计算硬件的进步与困境
从量子芯片到纠错的漫长征途:量子计算硬件的进步与困境
682 86
|
11月前
|
人工智能 IDE 测试技术
CodeBuddy Craft 使用体验:提升开发效率的智能编程助手
CodeBuddyCraft是一款基于人工智能的编程辅助工具,旨在提升开发者的编码效率与代码质量。其主要功能包括智能代码补全、代码生成、错误检测与修复、文档自动生成和代码重构建议。安装过程简单,支持多种开发环境如VSCode、IntelliJ IDEA和Eclipse,并通过配置文件优化使用体验。核心功能如智能代码补全和代码生成显著提高了开发效率,而错误检测与修复功能则帮助开发者识别潜在问题。高级功能如代码重构助手和测试代码生成进一步提升了代码质量。性能测试显示,使用CodeBuddyCraft后开发效率显
1325 1
|
9月前
|
数据安全/隐私保护 Python
抖音私信脚本app,协议私信群发工具,抖音python私信模块
这个实现包含三个主要模块:抖音私信核心功能类、辅助工具类和主程序入口。核心功能包括登录
|
运维 监控 数据可视化
大白话详解Spring Cloud服务降级与熔断
Hystrix断路器概述 1.1 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。这就造成有可能会发生 服务雪崩 。那么什么是服务雪崩呢? 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“ 扇出 ”(像一把打开的折扇)。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,这就是所谓的” 雪崩效应 “。也就是系统的 高可用 受到了破坏。
|
数据库 数据安全/隐私保护
Failed to load resource: the server responded with a status of 404 ()出错的原因是,因为自己调试的时候,设置了与宝塔不一样的数据库
Failed to load resource: the server responded with a status of 404 ()出错的原因是,因为自己调试的时候,设置了与宝塔不一样的数据库
|
Java 调度 流计算
基于多线程的方式优化 FLink 程序
这篇内容介绍了线程的基本概念和重要性。线程是程序执行的最小单位,比进程更细粒度,常用于提高程序响应性和性能。多线程可以实现并发处理,利用多核处理器,实现资源共享和复杂逻辑。文章还讨论了线程的五种状态(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED)以及如何在Java中创建和停止线程。最后提到了两种停止线程的方法:使用标识和中断机制。
579 5
|
人工智能 vr&ar
太炸裂了!SDXL Turbo在线图片实时生成,速度无与伦比【无需注册或登录】
太炸裂了!SDXL Turbo在线图片实时生成,速度无与伦比【无需注册或登录】
太炸裂了!SDXL Turbo在线图片实时生成,速度无与伦比【无需注册或登录】
|
开发工具 git
在modelscope中,使用git下载一直显示access denied
remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token instead of a password. See https://modelscope.cn/help/topics/git/troubleshooting_git#error-on-git-fetch-http-basic-access-denied fatal: Authenticati