單一職責原則 (Single Responsibility Principle,SRP) 以PHP為例
單一職責原則(Single Responsibility Principle,SRP)是一個軟體設計原則,它指出一個類別應該只有一個引起變化的原因。換句話說,一個類別應該只負責一個職責或功能。
以下是一個使用 PHP 進行單一職責原則重構的範例:
class FileLogger {
private $filename;
public function __construct($filename) {
$this->filename = $filename;
}
public function log($message) {
file_put_contents($this->filename, $message, FILE_APPEND);
}
public function clearLog() {
file_put_contents($this->filename, '');
}
}
class User {
private $name;
private $logger;
public function __construct($name, FileLogger $logger) {
$this->name = $name;
$this->logger = $logger;
}
public function setName($name) {
$this->name = $name;
$this->logger->log("User name changed to: " . $name);
}
}
在這個例子中,我們有兩個類別:FileLogger 和 User。
原始程式碼中,User 類別負責管理使用者的名稱,並在名稱變更時將訊息記錄到日誌中。這違反了單一職責原則,因為 User 類別應該只負責管理使用者的屬性,而不應該同時負責記錄日誌。
我們可以進行重構,將日誌記錄的職責提取到一個獨立的 FileLogger 類別中。現在,User 類別只關注使用者屬性的管理,而日誌記錄由 FileLogger 負責。
這樣的重構遵循了單一職責原則,讓每個類別都只有一個職責,並提高了程式碼的可讀性、可維護性和可擴展性。
下面是使用重構後的程式碼的範例:
$logger = new FileLogger('log.txt');
$user = new User('John Doe', $logger);
$user->setName('Jane Smith');
在這個範例中,我們創建了一個 FileLogger 實例並將其傳遞給 User 類別。當使用者名稱變更時,User 類別僅負責管理名稱,而 FileLogger 負責將變更記錄到日誌中。
這個重構遵循了單一職責原則,使得每個類別都只負責一個職責,並提高了程式碼的可讀性和可維護性。
留言
張貼留言