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


    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、查找

         上传分析:

          

      

         

  • 相关阅读:
    mysql复制那点事
    全排列问题
    56. Merge Interval
    2. Add Two Numbers
    20. Valid Parentheses
    121. Best Time to Buy and Sell Stock
    120. Triangle
    96. Unique Binary Search Trees
    91. Decode Ways
    72. Edit Distance
  • 原文地址:https://www.cnblogs.com/linksgo2011/p/2865993.html
Copyright © 2020-2023  润新知