zoukankan      html  css  js  c++  java
  • 避免问题发生的代码规范

    最近在处理老项目的问题,发现并处理了很多缺陷,虽然项目功能也不是十分多,但维护所花费的时间却很多,这是因为项目代码编写的并不完善,很多问题都难以追查。虽然项目问题很难处理,但同时也让我深思一些代码规范是多么的重要。以下先列出几点我积累到的经验,也希望可以得到一些建议。

    1. AJAX的JSON返回,应该包含状态status与信息message,在javascript端对状态分析而抛出message

    案例:一个mootools ajax的例子

    PHP:

    function handlerAjax() {
        $model = new userModel();
        $row = $model->getItem(array('username' => $_POST['username']));
        echo $row->email;
        exit();
    }
    

     
    Javascript:

    var myHTMLRequest = new Request.HTML(
        {
            url: 'index.php',
            onSuccess: function(response){
                $('email').value = response;
            }
        }
    ).post({'username':"william's"});
    

     

    以上代码或许能正常工作,看起来也没什么问题。但如果PHP端出错,在javascript就无法得到正确的信息,在firebug上可以明确看到有javascript错误,会让人误解是javascript程序写错了,浪费了时间去查javascript的代码。应该修改为以下方式:

    PHP:

    function handlerAjax() {
        $model = new userModel();
        $result = array();
        try{
            $row = $model->getItem(array('username' => $_POST['username']));
            if($row) {
                $result = array(
                    'status' => true,
                    'data' => $row->email
                );
            } else {
                $result = array(
                    'status' => false,
                    'message' => 'User not exists.'
                );
            }
        }catch (MyException $e) {
            $result = array(
                'status' => false,
                'message' => $e->getMessage();
            );
        }
        echo json_encode($result);
        exit();
    }
    

     
    javascript:

    var myRequest = new Request.JSON(
        {
            url: 'index.php',
            onSuccess: function(response){
                if(response.status) {
                    $('email').value = response.data;
                } else {
                    alert(response.message);
                }
            }
        }
    ).post({'username':"william's"});
    

     
    总结:PHP端的代码通常比较容易测试,最简单的抛出个异常或者写个LOG,问题就很明显。但javascript端调试比较困难,而且AJAX的原理是javascript从php上获取信息,中间过程中谁出了问题就比较难预计。所以php端应该给javascript端足够多的信息,好让javascript端可以处理后端出错的情况。并且在两端交互中应该需要统一格式,统一用JSON或者XML。所以在我的程序里所有给javascript传递数据的格式都会是JSON。

    2. 对于程序中遇到没有得到预期值的结果,要抛出异常

    案例:文件打开
    PHP:

    $handle = fopen($_FILES['file1']['tmp_name'], "r");
    // 处理文件...
    

     
    有时候,人就是喜欢偷懒,并且PHP的新手都特别乐观,认为只不过打开个文件,能出什么差错呢?但是在实施主机上,情况总是很多的,因为一般的环境并不会把所有PHP扩展加载。并且在WINDOWS上的PHP环境可能没有得到足够的访问权限,就例如是TEMP目录,也许因为环境配置问题使PHP对TEMP目录都不能读写,而上传文件会先存放到TEMP目录,所以以上代码还是有可能打不开的,而且还不报错,让你整个流程出现问题都不报错,你就只有一行行代码地查。应该写成如下代码:

    PHP:

    if (($handle = fopen($_FILES['file1']['tmp_name'], "r")) !== FALSE) {
        // 处理文件...
    } else {
        throw new MyException('error message...');
    }
    

     
    总结:多花点时间处理异常,为自己以后的维护工作变得更顺利,也为了别人的维护工作变得更顺利

    3. 对于有时效性的程序异常,不能只是抛出到页面上,应该写进到LOG文件里,方便以后查询

    案例:定时邮件发送
    PHP:

    function cronjobMail() {
        try {
            $model = new mailModel();
            $item = $model->getItem({array('id' => 1)});
        } catch(MyException $e){
            Watchbog::_($e->getMessage());
        }
    }
    

     
    总结:cronjob是服务器访问网站,不是浏览器访问网站,就算你抛出异常都会看不到,那么只能写进文件上,在一段时间后看下文件是否产生了异常信息,并且应该每一次cronjob执行都做一个记录,让PHP端可以知道cronjob的状态,记录last visit时间与执行时长,万一cronjob进程被关闭了,也能在PHP端查得到。

    4. Javascript上遇到的异常,应该用console.log输出

    PHP有异常需要抛出,javascript有异常也应该被抛出,这样有以后要查询问题会更容易。更多人喜欢用alert把信息直接弹出来,这就如PHP端用echo、var_dump把信息抛出来一样,单点的抛信息很没有效率,调试好又得清理它。用console.log只会把信息抛到console上,一般用户不会看到,不清理它也不影响用户体验。要注意不是所有浏览器都有console对象,需要写兼容层,我想这个大家都懂的。

    5. 用Javascript修动一个元素时,应该给它添加一个描述改动它的程序的位置

    一个元素被javascript改动,往往很难去查被什么程序所修改,如果是团队项目或者维护项目,别人往往不知道这个元素的变动该如何去调整,无疑会增加维护的成本。

    所以当你用javascript改动一个元素时,请描述它被什么程序修改过。

    例如:

    javascript

    $('.wrapper').html('xxx').attr('_notes', 'change in /js/script.js : 12');

    HTML

    <div class="wrapper" _notes="change in /js/script.js : 12">xxx</div>

    总结:也许这个规范对于大多数程序员来说是不必要的,不过对于新手这个就很有必要。因为很多新手对于HTML结构不满足页面条件时,都需要用javascript修改结构,所以就引发混乱的问题。

  • 相关阅读:
    写给Web开发人员看的Nginx介绍
    Nginx安装及配置详解
    Intellij IDEA 热部署处理
    JSP自定义标签就是如此简单
    过滤器入门看这一篇就够了
    Caffe FCN:可视化featureMaps和Weights(C++)、获取FCN结果
    Caffe RPN :error C2220: warning treated as error
    实例分割:MaskXRCnn 与Visual Genome数据集
    Detectron-MaskRCnn: 用于抠图的FCNN
    CaffeMFC:caffe.pb.h(2525): error C2059: syntax error : 'constant'
  • 原文地址:https://www.cnblogs.com/catcat811/p/2795522.html
Copyright © 2011-2022 走看看