原文地址,会不断更新 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框架的设计模式及遵守的软件设计原则
原文:http://blog.csdn.net/zuocheng_liu/article/details/43854847