OpenCart: 架构概览
来源:互联网 发布:行业数据 编辑:程序博客网 时间:2024/05/15 17:16
OpenCart是一个代码设计精致小巧的电子商务系统。
[Written by iefreer: Founder of Techbrood.com]
1、MVC架构:
OpenCart是基于MVC范式的。
model层负责获取数据。和其他一些框架如CakePHP相比,model的功能实现有限但简洁,直接调用DB类实现数据CRUD操作。
(CakePHP的模型层支持基础数据验证,复杂业务逻辑由Controller层处理)。
controller层负责处理请求,从model获取数据,提交给view层模板。
view负责组织展示。
2、“Registry”设计模式
在OP中,Registry是整个系统的信息中枢。
Registry是一个单例(Singleton),在index.php起始页面中,
首先作为构造函数参数传递给所要用到的类创建类实例,并随之将这个类实例设置到这个“注册表”中,
这个注册表就像是一个共享的数据总线一样,把各个模块/数据串联在一起。
3、整体流程
(1)创建Registry对象
(2)注册所有公共类
(3)创建Front类对象,作为请求分发器(Dispatcher)
(4)根据用户请求(url)创建控制器对象及其动作。
在Front类私有函数execute($action)中如下语句
$controller = new $class($this->registry); //创建控制器
(5)控制器加载相应的模型,如
$this->load->model('design/layout');
该语句将创建相应的model对象。
(6)控制器获取模板,绘制(提取数据并启用output buffer)到页面输出区output中
$this->render();
(7)最后Response对象把输出区的数据(页面)echo返回给用户
4、魔术函数(Magic method)
在Controller中调用$this->load->...时,熟悉面向对象语言的开发人员会觉得有点奇怪,因为Controller基类中并没有$load成员变量。
实际上这是由PHP5魔术函数来实现的。__get(), __set()函数在获取/设置非类定义成员变量的时候,会由PHP自动调用。
那么OP中在执行$this->load->...时实际调用的是:
public function __get($key) {
return $this->registry->get($key);
}
现在体会到Registry‘共享总线’的作用了吧。
- OpenCart: 架构概览
- OpenCart 架构分析与概览
- JXTA 架构概览
- Entity Framework 架构概览
- Android音频架构概览
- pomelo架构概览
- Tomcat架构分析概览
- GCM架构概览
- Guice指南-架构概览
- Android音频架构概览
- ARM 架构概览
- Android音频架构概览
- tomcat架构分析(概览)
- 大数据架构概览
- tomcat架构分析(概览)
- Scrapy架构概览
- Ionic2架构概览
- Angular 2 架构概览
- Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
- OpenCV Tutorial 1 - Chapters 1 and 2
- cxf介绍study
- B Buy Sticks
- 总序
- OpenCart: 架构概览
- 在 .NET 应用程序上运行 Rational PurifyPlus
- hibernate的url加入存入数据库时的编码
- OpenCV Tutorial 2 - Chapter 3
- ubuntu 下连接iSCSI Volume
- struts jasperreport 错误解决
- CVE2011-0065-Mozilla Firefox3.6.16 mChannel use after free vulnerability
- 多校第6场 HDU 3893&&JLU Drawing Pictures(数位DP变形,矩阵连乘)
- 【数学建模集训系列】公交查询系统的matlab实现-价格计算