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

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

阅读 4.5k
1 个回答

我也遇到过,一开始只有一两种状态,后来越来越多,每加一个状态,凡是要做状态判断的地址都要改......
后来我把 status 写成一个类, 类似下面我写的一个 demo

class 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的时候可以少做一些修改,如果有比较好的方法,顺便@我一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题