天天看點

P1:單一職責原則(SRP)

一、定義

Single Responsibility Principle,簡稱SRP,類的職責要單一,不要講過多的職責功能放到一個類中。

一個類隻負責一個功能領域中的相應職責。

如果一個類的所做的事情很多,就難以實作複用,而且各種職責的耦合度會變高。是以,應該将不同職責封裝在不同類中,不同的功能變化封裝在不同類中。這樣,接口的功能比較專一,可讀性、複用性都很高,也容易維護。

二、設計思路

假設我們要設計一個系統,有如下登入、注冊、支付等功能,類結構如下:

/**
     * 總控制類
     */
    @Controller
    public class userController{
        /**
         * 登入
         */
        public void login(){
        	// TODO 
        }
 
        /**
         * 注冊
         */
        public void register(){
        	// TODO
        }
        /**
         * 支付(支付寶)
         */
        public void aliPay(){
        	// TODO
        }
 
        /**
         * 支付(微信)
         */
        public void wXPay(){
        	// TODO
        }       
    }
           

如果我們按上面的類進行設計,則各種功能都混雜在一起,代碼可讀性很差,後期維護成本也很大。

是以我們要對UserController進行拆解,實作高内聚、低耦合:

public class LoginController(){}
public class registerController(){}
public class payController(){
    // TODO 支付類可以定義一個公共接口,分别有支付寶、微信支付的服務的實作:aliPayService\wXPayService
}
           

此外,關于職責單一的了解,我們還可以延伸到接口層面,也就是一個接口内部隻做一種單一職責的功能,盡量不要将一個接口做成大雜燴。否則,後期同樣會帶來很大的運維成本。

END.