Yogurt-framework之二:MVC

2.1 控制器

 控制器-Action这里就是modules下以 Action.class.php结尾的文件,也就是程序执行最小单元

 在yogurt中充当MVC模式的控制器角色,负责业务逻辑调用及控制模板输出,主要的任务是执行相应的动作,完成相应的业务操作,并把结果输给View,View控制接收结果展现给client

 模块指的是应用程序的执行单元对应modules/下的目录,modules 在init.php中定义 defined('M_DIR') or define('M_DIR', dirname(APP_DIR)."/modules");。

 动作指构成模块执行的最小单位, 在modules/下的目录里的*Action.class.php文件中的方法名。

 Action 方法的查找规则为:先查找目录M_PATH/moduleName,若不存在则查找子域相同的目录M_PATH/sld,若不存在则查找M_PATH目录下;

 Action 的使用 以 user 模块为例

 在文件中加入  modules/user/UserAction.class.php 

 class UserAction extends Action {

       function index(){

       echo 'hello world';

       }

       function login(){

     #Action类中对View的display方法进行了封装 参数$cacheTime代表页面级是否缓存 值为绝对值取整,若为0 则无缓存,大于0 代表缓存时间

       $this->display($tpl=null,$cacheTime=Config::VIEW_CACHE_TIME,$tplType=Config::VIEW_TEMPLATE_TYPE)

       }

 }

 

2.2 模型  

yogurt 中采用DAO与ORM实现MVC模式中的Model层,下面介绍下这两种方式

 [DAO]

DAO封装了数据操作常用的方法(getOne、getRow、getList、insert、update、delete等),以简化数据操作,底层的实现则有mysql、pdo、Mdb2、adodblite、mysqli,当然你也可以自己扩展,只需实现Dao的抽象方法即可

 

yogurt 中调用DAO的方法,以DaoPdo为例:

   

获取一个dao对象你可以这样调用 

 $dao =  Model::getDao($schema='www',$daoType='pdo'); // 通过factory模式取得不同的Dao对象 

或者

 $dao= new DaoPdo();

 $dao->connect($schema="www");  // $schema 为在 ini.php 中配置的 数据连接 ,这里返回的是一个原生类

 

DAO类的特点:

1 连贯操作

$dao->table('users')->where("uid=28")->field('uid,email')->find();

 

2 事务支持

 

3 数据缓存支持

 

DAO实际是通过拼接SQL语句完成与数据库的交互 

 

 [ORM]

(phpsa实例教程之号外6) adodbLite,  pearDB, pdo数据库抽象层的使用

(phpsa实例教程之号外8) orm技术2: propel技术详解

(phpsa实例教程之号外9) orm技术3: mdb2_query_tool 技术详解 

(phpsa实例教程之号外10) orm技术4: active_record介绍

 

 学习BusinessService(二): 使用QueryToolOrm

 学习BusinessService(三): 使用ActiveRecord

 学习BusinessService(四): 使用Propel

 

动画教程8: 使用ezpdo来做ORM

动画教程9: 使用propel来做ORM

动画教程10: 使用mdb2-query-tool来做ORM

动画教程11: 使用active_record来做ORM

 

小结:我在项目开发中曾经封装了多一层 BusinessService 然后extends BusinessService来实现逻辑操作功能 但并没有带来方便,反而显得繁琐;

代码大约是:

class UserBusinessService extends BusinessService{

        function getUser($uid){

$dao=$this->getDao("pdo"); 

retrun $dao->getRow('select * from user where uid=1 ');

}

调用 : $userObj = new UserBusinessService;

  

现在的写法就是直接在Action 中完成,如

$user = Model::getDao()->getRow('select * from user where uid=1 ');

这样看起来逻辑性强点,而且调试方便

 

2.3 视图

view[ViewSmart、ViewSmartTemplate、ViewPhplib、ViewSmartTemplate、Savant3(http://phpsavant.com)] 

 明白View: 显示功能

 (phpsa实例教程之号外5) smarty/phplib模板的使用

  1 模板功能

  2 UI扩展,这里基本上要依赖UI插件来实现,因为毕竟php的表现能力并不强

    category、Ajax、html生成、Pear 

你可能感兴趣的:(Yogurt-framework之二:MVC)