PHP 리팩토링은 단일 책임, 개방형 폐쇄형, Liskov 대체 원칙을 따르며 메소드 추출, 디자인 패턴 사용, 도구 및 테스트 사용을 통해 리팩토링을 구현합니다. 예를 들어, 복잡한 함수를 분할하고, 종속성 주입을 사용하여 테스트 가능성을 개선하고, 코드 확장성과 유지 관리성을 달성합니다.
Principle
Method
1. 추출 방법
복잡한 메소드의 코드 일부를 별도의 메소드로 추출하여 가독성과 유지 관리성을 향상시킵니다.
예:
class User { public function save($data) { // 验证数据 // 存储数据 // 发送确认邮件 } }
리팩토링 후:
class User { public function save($data) { $this->validate($data); $this->store($data); $this->sendConfirmationEmail(); } private function validate($data) { /* ... */ } private function store($data) { /* ... */ } private function sendConfirmationEmail() { /* ... */ } }
2. 디자인 패턴 사용
디자인 패턴은 싱글톤, 팩토리 및 관찰자 패턴과 같은 일반적인 문제에 대해 미리 설계된 솔루션을 제공합니다.
예:
팩토리 패턴을 사용하여 특정 유형을 지정하지 않고도 다양한 개체를 만들 수 있습니다.
interface LoggerFactory { public function createLogger(); } class FileLoggerFactory implements LoggerFactory { public function createLogger() { return new FileLogger(); } } class DatabaseLoggerFactory implements LoggerFactory { public function createLogger() { return new DatabaseLogger(); } } // 使用工厂创建 logger 对象 $factory = new FileLoggerFactory(); $logger = $factory->createLogger();
3. 도구 사용
코드 분석 도구(예: PHPStan, PHP CS Fixer)를 사용하여 자동으로 감지하고 잠재적인 문제를 해결합니다.
4. 테스트 수행
코드를 리팩토링하기 전에 테스트를 작성하여 새 코드가 기존 기능을 손상시키지 않는지 확인하세요.
실용 사례:
복잡한 함수를 리팩토링하고, 이를 여러 개의 작은 함수로 분할하고, 종속성 주입을 사용하여 테스트 가능성을 높입니다.
리팩토링 전:
function sendNotification($userId, $message, $type) { // ...发送通知逻辑... }
리팩토링 후:
interface NotificationSender { public function send($userId, $message, $type); } class EmailNotificationSender implements NotificationSender { // ...发送电子邮件通知逻辑... } class SmsNotificationSender implements NotificationSender { // ...发送短信通知逻辑... } function sendNotification($userId, $message, $type, NotificationSender $sender) { $sender->send($userId, $message, $type); }
종속성을 사용하여 주입을 통해 다른 알림 발신자로 쉽게 전환하여 코드의 테스트 가능성과 유연성을 향상시킬 수 있습니다.
위 내용은 PHP 코드 리팩토링의 원리와 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!