猿问

数据库频繁变更“状态status”字段,如何能更便捷地维护程序

实际项目中,客户经常会拍脑袋做决定要增加删除一些状态字段。
举个栗子,比如发布一篇文章,最初的状态status字段只有两个,一个是“未发布”状态,一个是“已发布”状态。
后来客户又让加一个“审核中”状态,再后来又让加一个“已删除”...
状态一变,伴随着的数据统计、操作日志、积分计算、查询筛选等等一系列的方法都要变动,甚至更糟糕的情况是有些利用这个状态status字段做的判断也要变。
所以问题就是怎样封装status字段才能做到最优?或者说其他方法在调用这个字段的时候,应该注意些什么?

波斯汪
浏览 528回答 1
1回答

Smart猫小萌

我也遇到过,一开始只有一两种状态,后来越来越多,每加一个状态,凡是要做状态判断的地址都要改......后来我把 status 写成一个类, 类似下面我写的一个 democlass Status{    public static $all_status = array(        0 => array(            'label' => '未发布',            'value' => 0,            'point' => 1,  # 分数             'private' => true  # 只有自己能看         ),        1 => array(            'label' => '待审核',            'value' => 1,            'point' => 2,  # 分数             'private' => true  # 只有自己能看         ),        2 => array(            'label' => '已发布',            'value' => 2,            'point' => 10,  # 分数             'private' => false  # 只有自己能看         ),     );    public function __construct($status)     {        $this->status = self::$all_status[$status];     }    /** 是否可以展示 */     public function canShow()     {        if($this->status['private'] === false) {            return true;         }        return false;     }    /** 其他判断 */     public function canDoSomething()     {        # ...         return true;     } } $article = array(    'content' => '文章内容',    'title' => '文章标题',    'status' => 2); $statusObj = new Status($article['status']);if($statusObj->canShow()){     showArticle($article) }这样有增减status的时候可以少做一些修改,如果有比较好的方法,顺便@我一下
随时随地看视频慕课网APP

相关分类

Java
我要回答