ECMALL源码阅读一:架构
无意中,从朋友手中接触到ECMALL的源码,用来搭建C2C的商城。想弄清楚他的架构,发现框架跟细节实现挺清晰简洁。并没有用太多第三方的代码,也几乎没有冗余代码。用很简单的思路,实现了MVC,实现了代码模板分离等。
带着这种兴趣,我把他的代码细致看了一遍。并且写了几篇笔记,记录ECMALL的实现细节。以备以后回顾。
- ECMALL采用面向对象的MVC模式。其面向对象跟MVC的表现都比较清晰。
- 采用了流行的单入口模式,这一方式可以让我们方便统一加载地基础类。
- 而模板引擎跟对象数据映射都采用了自己编写的类。简洁高效。
- 数据缓存跟模板缓存的实现,也保证了系统的高效运行。
控制器(Controll):
ECMALL有2种基础控制器,FrontendApp(前台)和 BackendApp(后台)。所有的控制器(APP)都分别继承这两个对象。所有用户的请求最后都被转发到 相关APP的ACTION,我们可以继承这两种控制器创建自定义控制器。
- 命名规则:类名(首字母大写) + .app + .php;
- 文件位置:/app;
- 类名规则:类名+App
- 访问规则:/index.php?app=控制器类&act=方法¶m=…
自定义控制器(Demo.app.php)
<?php
/**
* 控制器演示类
* @author CTO
*/
class DemoApp extends MallbaseApp{
/**
* 默认控制器方法
* @return void
*/
Function index(){
Echo __METHOD__;
}
/**
* Goods方法对应Goods模型
* @return void
*/
function goods(){
/*实例化goods*/
$goods = m(‘goods’);
$id = empty($_GET[‘id’]) ? 0 : intval($_GET[‘id’]);
if(!$id){
echo “Warning! Hacking!”;
return;
}
/*获取goods信息*/
$goods_info = $goods->get_info($id);
/*输出goods信息*/
$result = print_r($goods_info);
}
/*通过自定义模型存储信息*/
function test(){
$test = m(‘test’);
/*name,name2对应表字段*/
$data = array(‘name’=>’建航’,”name2”=>”科技”);
$test->addData($data);
}
}
?>
模型(Model):
ECMALL模型分为业务模型与普通模型,二者皆继承自核心类的BaseModel模型;业务模型是没有表联系的,只有业务逻辑。普通模型跟数据库表一一对应。
- 命名规则:类名(首字母大写) + .model+ .php;
- 文件位置:/includes/models;
- 类名规则:类名+Model;
- 调用规则:普通模型:m(“模型名”)业务模型:bm(“模型名”)
自定义模型(Test.model.php)
<?php
class TestModel extends BaseModel{
/**
* $table为表映射,$prikey为映射表的主键,$alias为表查询时的别名,
*/
$table=test;
$prikey=id;
$alias=test;
$_name=test;
/**
* 增加数据演示
* @author kichijyo;
* @return void
*/
function addData($data){
$this->add($data);//该处的add()继承自BaseModel类
}
}
?>