SOLID原则详解与PHP实战示例
SOLID是面向对象编程的五大设计原则,旨在提升代码的可维护性、扩展性和复用性。
SOLID每个字母代表一个原则
- SRP(单一职责原则):一个类应该只有一个引起变化的原因。也就是说,一个类应该只负责一项职责。
- OCP(开闭原则):软件实体应该对扩展开放,对修改关闭。即通过扩展来实现变化,而不是修改现有代码。
- LSP(里氏替换原则):子类应该能够替换其父类,并且不会破坏程序的正确性。
- ISP(接口隔离原则):客户端不应该被迫依赖它们不使用的接口。即接口应该小而专注,而不是大而全。
- 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) {
/* 发送邮件 */ }