單一職責原則 (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 負責將變更記錄到日誌中。


這個重構遵循了單一職責原則,使得每個類別都只負責一個職責,並提高了程式碼的可讀性和可維護性。

留言

這個網誌中的熱門文章

bcb C++ Builder無法讀取JPG

tesseract is not installed or it's not in your path

tensorflow gpu版本 安裝教學 window 10 python 3.6