標籤:ssh 設計模式 mvc
原文地址,會不斷更新 http://it.zuocheng.net/mvc-design-pattern-design-principle-summary 作程的技術部落格
本文以主流的MVC架構為例,比如Java 的SSH、PHP的Symfony和Zend Framework ,在簡單地剖析他們的設計原理之後,找到其中使用的設計模式;鑒賞他們的代碼實現,查看設計者們都遵守了哪些軟體設計原則。作此文,一為學習,二為總結。其中下面所寫內容可能並不全面,也可能不準確,但會不斷修改完善。
架構模式MVC 模式
- y = f (x)
- View = Controller (Model, Request)
Active Record 模式
- Yii Active Record
- Ruby on Rails Active Record
ORM 模式
- PHP 的 Doctorine
- Java 的 Hibernate
三/四層架構,3/4-TIER ARCHITECTURE
- MVC 架構會借鑒三/四層架構的分層思想,對整個系統進行分層,最常見的是在 Model 層中再細分層次。
- SSH 的 DAO/JavaBean、Service、Response 等
- Symfony 2 的 Doctrine、Service、view 等
設計模式的使用複合模式,Compound Pattern
- MVC架構如果不使用複合模式,本文也沒有任何意義了
單例模式,Singleton Pattern
- Controller 、 Context、 View 等架構核心類使用了單例模式
多例模式,Multition Pattern
- 各類資源集區、進程池、線程池(PHP 的後面兩個用不上)
策略模式,Strategy Pattern代理模式,Proxy Pattern
原廠模式,Factory Methond Pattern
Action 對象的建立
抽象原廠模式,Abstract Factory Pattern
- ajxaAction 、 WebAction 、 APIAction 以及 ajax和web組合的Action 或者 ajax和API組合的Action,複雜的架構會使用抽象原廠模式
門面模式,Facade Pattern
Logger 類,將第三方開源Logger類封裝統一介面,將第三方 Logger 繁冗介面屏蔽
Adapter Pattern
- Zend Framework 的 Zend_Db_Adapter 類,將具體不同的資料庫(Mysql、Oracle、SQLite)類介面通過Driver類封裝,為上層提供統一介面
- Zend_Cache 對不同cache的介面的再次封裝
模版模式,Template Method Pattern
建造者模式,Builder Pattern
- 依賴注入原則的遵守和實踐,將一個複雜的對象的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
- Content 對象的建立者是 Controller
- Config 對象的建立
- ORM 的 Object 對象建立
橋樑模式,Bridge Pattern命令模式,Command Pattern
- Http 請求的解析就是命令模式
- Symfony 2 的 Console
- Symfony 2 的 Command 類
裝飾模式,Decorator Pattern
- ajxaAction 、 WebAction 、 APIAction 以及 ajax和web組合的Action 或者 ajax和API組合的Action
迭代器模式,Iterator Pattern
組合模式,Composite Pattern觀察者模式,Observer Pattern
責任鏈模式,Chain of Responsibility Pattern
- 路由的解析,尤其是Restful風格的URL,依據路由表(責任鏈),定位Action 類和方法
訪問者模式,Visitor Pattern狀態模式,State Patter原型模式,Prototype Pattern
- Action 中,講執行權移交給另外一個 Action ,比如redirect 或者 forward,獲得執行的Action還要和原有Action的屬性、狀態、上下文一致。原型模式是比較好的選擇。
中介者模式,Mediator Pattern
- 充當中介者的類是 Context,某些架構Context類,為Request、Respose、GlobalConfig 等等單例類進行抽象,為業務代碼提供唯一的調用方式,即Context的類提供的介面
解譯器模式,Interpreter Pattern亨元模式,Flyweight Pattern
- 通用狀態類
- 各種 Util 類
- HTTP meta 類、特殊字元享元歸類
備忘錄模式,Memento Pattern
軟體設計原則 SOLID單一職責原則(Simple responsibility pinciple SRP)開-閉原則(Open-Closed Principle, OCP)裡氏代換原則(Liskov Substitution Principle,LSP)迪米特法則(Law of Demeter LoD),最少知識原則(Least Knowledge Principle,LKP)介面隔離原則(Interface Segregation Principle, ISP)依賴倒置原則(Dependence Inversion Principle)
- 建造者模式的使用
- 路由表的使用,或其他各種配置都收集到設定檔中,使用依賴注入容器,實現代碼和實現的解耦
主流MVC架構的設計模式及遵守的軟體設計原則