定義:Software entities should be open forextension,but closed formodification.
(軟體實體應該是對擴充開放,但是修改關閉)
如何實現:
在設計上應該要使用抽象的介面,透過介面的行為來組成我們的商業邏輯。
這樣的設計,配合Dependency Injection,未來不管在那麼不管需求的內容如何變化,都可以因為改變注入的內容,而不用修改場景類別,以滿足OCP原則。
上圖場景中,BusinessClass他依賴於IDao,並沒有直接的去依賴MySqlDao及MySqlDao,如此一來,當在呼叫BusinessClass.CRUD()時,我們可以先透過注入不同的的Dao類型,去滿實足同的實作結果,未來在需要擴充時,也可以延伸出OracleDao、SqliteDao...等不同的類型,透過這些不同類別的實作,可以去改變BusinessClass的行為內容,但是對BusinessClass本身而言是不需要修改的,這便是OCP的精神。
本文參考引用:
[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day17 – 單一職責原則
沒有留言:
張貼留言