当前位置: 首页 > news >正文

【软件设计】SOLID原则详解与PHP实战示例

SOLID原则详解与PHP实战示例

SOLID是面向对象编程的五大设计原则,旨在提升代码的可维护性、扩展性和复用性。

SOLID每个字母代表一个原则

  1. SRP(单一职责原则):一个类应该只有一个引起变化的原因。也就是说,一个类应该只负责一项职责。
  2. OCP(开闭原则):软件实体应该对扩展开放,对修改关闭。即通过扩展来实现变化,而不是修改现有代码。
  3. LSP(里氏替换原则):子类应该能够替换其父类,并且不会破坏程序的正确性。
  4. ISP(接口隔离原则):客户端不应该被迫依赖它们不使用的接口。即接口应该小而专注,而不是大而全。
  5. DIP(依赖倒置原则):高层模块不应该依赖低层模块,两者都应该依赖抽象。抽象不应该依赖细节,细节应该依

结合PHP代码示例逐一解析:

1. SRP(单一职责原则)

定义:一个类应仅有一个引起变化的原因,即专注于单一功能。

违反示例

class OrderProcessor {
   
    public function process(Order $order) {
   
        // 处理订单逻辑
        $this->saveToDatabase($order);
        $this->sendConfirmationEmail($order);
    }

    private function saveToDatabase(Order $order) {
    /* ... */ }

    private function sendConfirmationEmail(Order $order) {
    /* ... */ }
}

问题OrderProcessor同时负责订单处理和邮件发送,职责不单一。

改进方案

class OrderProcessor {
   
    public function __construct(
        private OrderRepository $repository,
        private EmailService $emailService
    ) {
   }

    public function process(Order $order) {
   
        $this->repository->save($order);
        $this->emailService->sendConfirmation($order);
    }
}

class OrderRepository {
   
    public function save(Order $order) {
    /* 数据库操作 */ }
}

class EmailService {
   
    public function sendConfirmation(Order $order) {
    /* 发送邮件 */ }
http://www.dtcms.com/a/37076.html

相关文章:

  • PageForge v2025.1.6 发布:支持 KaTeX 数学公式渲染
  • Spring AI + 大模型开发应用
  • 爬楼梯问题
  • 【Alertmanager】Alertmanager告警路由,告警静默,告警抑制,高可用的实现
  • CryptoJS库中WordArray对象支持哪些输出格式?除了toString() 方法还有什么方法可以输出吗?WordArray对象的作用是什么?
  • Python入门教程丨3.8 网络编程
  • 计算机毕业设计 ——jspssm504springboot 职称评审管理系统
  • Redis搭建集群
  • linux--多进程开发(4) 进程退出、孤儿进程、僵尸进程、进程回收wait()
  • 从最小依赖角度谈静态库与动态库的选择及配置策略
  • 【大模型学习】Transformer架构解析
  • IDEA集成DeepSeek,通过离线安装解决无法安装Proxy AI插件问题
  • Linux修改Redis密码
  • 编程算法总结
  • 【初阶数据结构】树和二叉树
  • 已有项目添加vitepress
  • 硬件基础(3):三极管(1):理论基础
  • 补题A-E Codeforces Round 953 (Div. 2)
  • 【Qt源码】窥视信号槽实现机制
  • jdk21下载、安装(Windows、Linux、macOS)
  • HTML转义和反转义工具类
  • @KafkaListener和KafkaTemplate自动装配原理分析
  • TLS与自签名证书的创建、作用、用到的工具等知识的介绍
  • 《MULTI-CLASS SEMANTIC SEGMENTATION OF FACES》论文分享(侵删)
  • pandas如何添加列
  • android进阶面试题目
  • 机器学习(部分算法、模型)
  • 【redis】数据类型之Bitfields
  • 网络安全入门|HTTP慢速攻击的终极防御:零信任与AI对抗
  • 信号——进程间通信(20250225)