【思考】PHP 代码封装之路

最近在学习Swoole websocket。并根据教程,自己编写了一个贪吃蛇的小游戏,具体代码比较复杂,不在这里叙述游戏逻辑,总结一下这个小项目中思考到的封装思想。

image.png

问题描述

服务器端接收客户端传过来的指令,并完成相应的业务处理。这时候可能就需要分三个文件,相当于三层去处理这部分功能。网络层→业务层→数据操作层。可是我却偏偏想着 业务层跟数据操作层用一个文件试试。结果代码就写成了这样。

    public function onMessage($server, $request){
        $data = json_decode($request->data, true);

        switch ($data['code']) {
            //发起匹配队列
            case 1000:
                DbCenter::matchPlayer($request->fd);
                break;
            //开启游戏
            case 1001:
                DbCenter::startRoom($request->fd,$data['room_id']);
                break;
            case 1002:
                DbCenter::movePlayer($request->fd,$data['direction']);
                break;
        }
    }

DbCenter中业务跟数据处理的代码

    public static function matchPlayer($fd){
        $key_fd = self::PREFIX_KEY . ":player_fd:" . $fd;
        $play_id = self::redis()->get($key_fd);

        $key = self::PREFIX_KEY . ":player_wait_list";
        self::redis()->lPush($key, $play_id);

        //发送匹配请求
        self::$server->task(['code'=>3000]);
    }
    public static function startRoom($fd, $roomId){
        $key_fd = self::PREFIX_KEY . ":player_fd:" . $fd;
        $play_id = self::redis()->get($key_fd);

        if(!isset(self::$global['rooms'][$roomId])){
            self::$global['rooms'][$roomId] = [
                'id' => $roomId,
                'manager' => new Master()
            ];
        }

    }

可以看到的是,全屏都带着操作 redis的key,并且很多地方都是相同的代码,无限的在重复代码

甚至,假如把全部的业务都用一个文件完成,那代码可能就会是这个样子。

image.png

简直是 惨不忍睹,不忍直视。代码冗余,代码错乱

反思

现在重新回到项目开始,我发现对不同业务代码进行拆分是非常有必要的。但是,为什么要拆分?怎么拆分?拆分几部分?每一部分的职责都是做什么?

为什么要拆分?

假设一个功能一句代码就能实现,那根本不需要拆分。假设这个功能需要10行代码,那可能拆分的必要也不是很大,但是上百或者上千行代码,业务变得复杂,这就需要对业务进行拆分了。

怎么拆分?

假设我是算着代码行数,每写10行就分出一个方法。这可能也是一种拆分方式,但是却是不合理的。拆分是为了在别的地方用的时候不用重复写一遍,直接一句搞定。

拆分几部分?

正常是三大部分,网络层→业务层→数据操作层。但是每一层是否是多层还得视情况而定。比如说,数据操作层只是简单返回完整数据,就可能是Model,可能是多个Model集合成的Dao。

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYvkAAEG' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片