SOLID 设计原则

SOLID 设计原则

考虑代码结构,使代码易于维护、易于扩展、易于阅读。

SRP

Single Responsibility Principle 单一功能原则

职责单一,一个类只有一种修改的原因。

每个类都有它该在的地方,也只能在它该在的地方。

例如:

  Controller 类,只接受用户输入,返回输出,不需要具体处理背后的事情。当需要表单验证的时候,注入相应的 Request 类。当需要数据操作时,注入相应的 Repository 或 Service 或 Factory。

  Model 类,将修改器,访问器定义在 trait 然后 use 进来。数据操作逻辑分离成 Repository。

  Helper.php 全局函数,将同类型的 helper 分离成单独的文件,使其高内聚。然后在 Helper.php 中引入。

OCP

Open/Close Principle 开闭原则

不更改类的前提下,能扩展类的行为

例如:
所有具体的类都需要实现 Interface 中定义的方法。
在 Factory 中实例化具体的类。
在 Controller 中使用 Factory。

首先创建一个 PaymentInterface,任何支付方式都必须实现此接口中定义的方法。

interface PaymentInterface {
    public function pay();
}

接着,创建两个实现 PaymentInterface 的具体类。

class Alipay implements PaymentInterface {
    public function pay() {
        // 支付宝支付具体代码
    }
}
class Wechat implements PaymentInterface {
    public function pay() {
        // 微信支付具体代码
    }
}

然后,创建一个支付工厂,此工厂用来实例化具体的支付类

class PeymentFactory
{
    public function init($payType) {
        switch ($payType) {
            case 'Alipay':
                return new Alipay();
            case 'Wechat':
                return new Wechat();
        }
        throw new Exception('未知支付方式');
    }
}

最后,在控制器中注入此 Factory

public function pay (Request $request, PaymentFactory $paymentFactory) {
    $payment = $paymentFactory->init($request->payType);
    $payment->pay();
}

LSP

Liskov Substitution Principle 里氏替换原则

子类要可以替代父类

ISP

Interface Segregation Principle 接口隔离原则

使用客户端特定的细粒度接口

使用非内聚接口时,创建多个较小的高内聚接口。不要强迫调用者去依赖他不适用的接口。

DIP

Dependency Inversion Principle 依赖反转原则

依赖抽象接口,而不是具体实现

将高层次组件对低层次组件的依赖解耦出来,例如「类A」原本依赖于「类B」,那么新建 「InterfaceB」,让「类A」改为依赖于「InterfaceB」,让「类B」去实现「InterfaceB」 规定的接口方法。


依赖注入 DI

一个类,如果依赖另一个类的功能,就通过注入方式实现。比如在构造方法中引入。

控制反转 IOC

将创建实例的控制权剥离出来,交给IOC容器控制。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!