主流MVC框架的设计模式及遵守的软件设计原则
来源:互联网 发布:linux tftp使用 编辑:程序博客网 时间:2024/05/06 04:01
原文地址,会不断更新 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
- 各种 Trigger 类
- 各类自定义的扩展
责任链模式,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)
- 建造者模式的使用
- 路由表的使用,或其他各种配置都收集到配置文件中,使用依赖注入容器,实现代码和实现的解耦
1 0
- 主流MVC框架的设计模式及遵守的软件设计原则
- 设计模式之遵守的原则
- 软件设计原则和设计模式的理解
- 软件设计模式的几个原则
- 软件设计模式的几个原则
- 一Java设计模式——需要遵守的六个原则
- oop中设计类的时候应该遵守的原则
- 【软件设计模式】设计原则小结
- 设计模式:设计自己的MVC框架
- 设计模式:设计自己的MVC框架
- 黑马程序员_java面向对象需要遵守的设计原则
- 《java与模式》-6 代码中应该遵守的原则
- 写程序遵守的原则
- 简历应遵守的原则
- 设计模式的分类及原则
- 面向对象软件设计原则之软件实体的设计原则
- mvc分层软件设计的优点及缺点
- 设计模式的六大原则及设计模式分类
- LeetCode Reverse Nodes in k-Group
- 从产品经理的角度看《我是歌手》
- Codeforces 513C Second price auction (bruteforce)
- CodeChef STFM - Chef and Strange Formula (康托展开)
- Go语言开发环境配置
- 主流MVC框架的设计模式及遵守的软件设计原则
- iBATIS系统学习笔记一
- 13.3.3 获取指标
- C++ STL 算法:排序组合
- 众数问题
- Weka.jar的导入Eclipse
- Hibernate中常用的HQL语句总结
- 《coredump问题原理探究》Linux x86版6.8节多继承coredump例子
- Remove Element