如何分析一个完整的系统(系统源码分析思路一)

1、原则

  吸收作者的思想为我所用

  不能像看小说一样走马观花,每个方法都要弄清楚,遇到不明白的方法就要看手册,并记录亮点的地方。

    三部曲:

      1、开始前写好用例,弄好环境

      2、分析的时候要做好记录

      3、完了做好总结

2、开始操作以一个CMS 为例

  准备操作:

    1、服务器环境

    2、手册准备好

    3、编辑器准备好

  分析路线图:

 

 

  分析用例:

 

    

    1、前端显示部分

       首页:导航、内容、友情链接

       1、文章     分类:新闻、产品、系统公告   功能:摘要、列表、分页、详细

       2、图片   幻灯、产品、公司介绍图片

       3、单页     公司介绍、人才招聘

    2、后台管理模块

      1、文章、新闻、产品、单页的CURD

      2、图片、视频上传

      3、链接添加删除

      4、留言管理

      5、招聘管理 

3、开始分析做笔记

  1、在components下面找到了一个截取utf8的类,原理是utf8使用变长的方式,1-3个字节表示一个字符, 如果第一个字符的ascll 值大于224那么后面3个字节组成一个汉字。如果大于192的就是2个字节组成,如果大于65就是字母,一个字节组成,小于65就是标点。

    分析了下写了另一篇博客。

  2、 系统前台定义了前台控制器基类

    

View Code
 1 /**
 2  * @name    前台控制器基类
 3  */
 4 class Controller extends CController
 5 {
 6     /**
 7      * @name    设置默认视图
 8      */
 9     public $layout='//layouts/main';
10     public $action_id;
11     public $controller_id;
12     public $page_id;
13     public $referrer;
14 
15     protected function beforeAction($action)
16     {
17         $this->controller_id = Yii::app()->controller->id;
18         $this->action_id     = Yii::app()->controller->action->id;
19         $this->page_id       = $this->controller_id.'/'.$this->action_id;
20         $this->referrer      = Yii::app()->request->getUrlReferrer();
21         return true;
22     }
23 }

       定义了布局文件的位置,和参数,统一前台页面的风格

  3、值得注意的是一个beforeAction方法  

  形式如下

protected function beforeAction($action){}

  这样Yii会在action前去执行这部分代码,可以初始化一部分数据,比如

  

        $this->controller_id = Yii::app()->controller->id; //定义控制器Id
        $this->action_id     = Yii::app()->controller->action->id; //定义actionID
        $this->page_id       = $this->controller_id.'/'.$this->action_id; //当前页面ID
        $this->referrer      = Yii::app()->request->getUrlReferrer();  //返回url
        return true;  //如果返回false停止执行

  4、浏览了一边前端的Controller

    基本思路为

       使用beforAction()初始化一些脚本样式,然后每个action 实例化相关的Behavior,使用behavior得到数据,最后使用$this->render渲染到页面上

  5、前端主要就是展示的页面,没有太多的逻辑,然后分析后端的admin模块代码,开始分析管理员的登陆过程

    登陆的步骤整理为:

       1、判断是否已经登陆,如果已经登陆,转向页面

       2、验证输入,数据格式,这里使用一个formModel来操作验证比较好

       3、继续2步骤,严格验证密码(使用UserIdentity类来进行验证)

       4、登陆或者返回错误

       5、写入session数据,然后转向

     

    突然想起:
      写一个方法的技巧:
      参数、过程、返回 即输入、操作、输出
      关于model,像类似删除的操作应该类似 对象->delete(),不要写成delete($id),应为要对象存在才能删除,前者更加面向对象

   6、登陆成功后依次分析下面的模块,首先是登陆日志功能       

     这里有一个技术点:分页

    来看下分页原理:

      

 1 //登陆成功后,显示登陆日志,然后分页
 2 public function userlog(){
 3         $criteria = new CDbCriteria;  //条件
 4         $criteria->order='last_time desc';  //排序方式
 5         
 6         $count=User::model()->count($criteria);   //计算记录条数
 7         $pages=new CPagination($count);   //实例化分页类
 8         $pages->pageSize=10;       //设置分页数据
 9            $pages->applyLimit($criteria);  //应用分页条件
10         $users = User::Model()->findAll($criteria);   //获取数据
11         
12         return compact('users','pages');
13     }

  view页面使用了一个widget来接收数据

  

<?php $this->widget("CFLinkPagerAdminWidget",array("pages"=>$pages));?>

  7、开始分析视频管理模块

     对视频的操作具有一下:

      1、上传 2、上传封面 3、编辑 4、禁用 5、列表 6、显示 7、存储 8、查找

     上传分析:

      

  

     

posted @ 2013-01-18 10:40  linksgo2011  阅读(598)  评论(0编辑  收藏  举报