ECMALL源码阅读一:架构

无意中,从朋友手中接触到ECMALL的源码,用来搭建C2C的商城。想弄清楚他的架构,发现框架跟细节实现挺清晰简洁。并没有用太多第三方的代码,也几乎没有冗余代码。用很简单的思路,实现了MVC,实现了代码模板分离等。
带着这种兴趣,我把他的代码细致看了一遍。并且写了几篇笔记,记录ECMALL的实现细节。以备以后回顾。

  1. ECMALL采用面向对象的MVC模式。其面向对象跟MVC的表现都比较清晰。
  2. 采用了流行的单入口模式,这一方式可以让我们方便统一加载地基础类。
  3. 而模板引擎跟对象数据映射都采用了自己编写的类。简洁高效。
  4. 数据缓存跟模板缓存的实现,也保证了系统的高效运行。

控制器(Controll):

Alt text ECMALL有2种基础控制器,FrontendApp(前台)和 BackendApp(后台)。所有的控制器(APP)都分别继承这两个对象。所有用户的请求最后都被转发到 相关APP的ACTION,我们可以继承这两种控制器创建自定义控制器。

自定义控制器(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):

Alt text ECMALL模型分为业务模型与普通模型,二者皆继承自核心类的BaseModel模型;业务模型是没有表联系的,只有业务逻辑。普通模型跟数据库表一一对应。

自定义模型(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类
	}
}
?>