博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记第二次使用php开发项目之绝不重复自己
阅读量:6587 次
发布时间:2019-06-24

本文共 4067 字,大约阅读时间需要 13 分钟。

      严格说起来,自己并非一个合格的php程序员。第一次使用php开发,不过是因为游戏上线,需要一个统计管理后台和GM后台,因为招聘已经来不及,所以我就上前线了!

      凭着对php语法的一点点记忆(大学的时候学习过),边看《php与Mysql Web开发》,就边上手了!刚开始写的时候,根本没有章法,html 和 php直接混在一起,后来边开发边琢磨,不能这样,起码要界面和逻辑分离一下吧。想起来大学的时候做过ASP.NET,使用了自己理解的三层构架,那么就把三层构架引入吧。可是实际的开发过程中,觉得中间逻辑层和数据层实在不想费脑筋分开,就索性用两层好了,于是就调整成了两层构架。

  比如我们举一个例子:我们要做一下金币消耗的统计。

      首先看下 coinsCustomView.php:

$value) { ?>
类型 数值

       再看下 dataStaticsLogic.php的定义:

selectDB($mongoName); $mongoCollection = $mongoDB->selectCollection("mmo.moneySerials"); $statics = array(); foreach ($moneyConfig as $key=>$value) { $query = array('type'=>$key); $itemSum = 0; $cursor = $mongoCollection->find($query); while($cursor->hasNext()) { $row = $cursor->getNext(); $itemSum += $row['value']; } $item["type"] = $value; $item["content"] = $itemSum; $statics[] = $item; } $mongoConn->close(); return $statics; }

   ***View.php 是用来展现数据的代码,而***Logic.php是用来处理逻辑和获取数据的代码。就是套用这样一个简单的逻辑,基本是面向对象的思想(项目中基本没有使用php面向对象的思想),完成了第一个php统计后台和GM管理后台!我只能可能要被php大神耻笑了。大家还是体谅一下一个java程序写php的苦衷吧!

      很多,我们迎来了第二个项目,第二个项目也需要一个统计后台。当开始着手做这个php统计后台的时候,我自己心中有两个声音一直在提醒我。一个是,把原来的项目拔拔,再改吧改吧,继续套用好了,反正上次也没有出现什么问题。第二个声音就是,专业一点,不要重复自己,使用现在流行的mvc模式,去做这个新的后台,这样也能完成自己对php的新的认知。很多朋友来提来意见,有的说,代码技术只是工具啦,做出来能用就好,而且还是一个内部使用工具,做那么专业干嘛,简单高效是准则! 有的说,直接套用php成熟的框架smarty或者 thinkphp啦。根本不用想太多!

      最终最终还是,奔着绝不重复自己的原则,决定使用mvc模式,把数据,逻辑和界面分开!也趁机好好学习了一下mvc模式,因为毕业以来一直在做服务器的开发,所以对前段这些框架,虽然他们天天讲,可是自己始终不太理解。好吧,趁这次机会,提升自己一下啦。

      那么我们就拿一个简单的例子来做参考,来理解一下mvc模式,顺便看看新的项目,是如何做模块的划分的,如何分离界面,数据和逻辑的!

      首先给我们看下图:

     

      首先在代码的组织上,就将业务逻辑和界面分开。关于MVC的示意图,网上是在是太多了,我就不在这里贴出来了,大家随便搜搜,大把的图片例子和文档。

      我们用一个获取所有房间列表的例子来做参考好了!

      首先看下Model层,就是所谓业务层,包含Room类的设计,还有需要说明的是,CurlRequest类,这里就不贴出来了,就是http请求获取数据,在这里相较于前一个项目,很多东西都是封装成了类!无论是http请求,还是数据库请求!

class Room {    private $roomId;    private $roomName;    private $roomUserCnt;    private $roomSpectCnt;        public function __construct($roomId,$roomName,$roomUserCnt,$roomSpectCnt) {        $this->roomId = $roomId;        $this->roomName = $roomName;        $this->roomUserCnt = $roomUserCnt;        $this->roomSpectCnt = $roomSpectCnt;    }        public function getRoomId(){        return $this->roomId;    }        public function getRoomName(){        return $this->roomName;    }        public function getRoomUserCnt(){        return $this->roomUserCnt;    }        public function getRoomSpectCnt(){        return $this->roomSpectCnt;    }    }class RoomModel {        private $cmd = "php";        private $subCmd = "roomList";        public function fetchAllRooms(){        require_once dirname( dirname( dirname(__FILE__) ) ).'/base/CurlRequest.class.php';        require_once 'Room.class.php';                $allRoom = array();        $curl = new CurlRequest();                $result = $curl->fetchResponse($this->cmd, $this->subCmd);                 $resultByJson = json_decode($result,true);                for($i = 0;$i

        RoomModel的职责很简单,就是获得所有的房间数据,无论是通过Http请求获得,还是通过Mysql数据库获得,界面和逻辑层都无从得知。

       下面是界面层:也就是RoomView.php的代码

"; echo "房间id房间名称参与人数旁观人数 "; foreach ($allRoom as $room) { echo ""; echo "".$room->getRoomId().""; echo "".$room->getRoomName().""; echo "".$room->getRoomUserCnt().""; echo "".$room->getRoomSpectCnt().""; echo ""; } echo ""?>

   View在这里,就是控制界面,输出所要展现的数据。

      很多人可能就想,有View和Model在这里,完全不需要Controller了吧,起始我觉得也是这样

      下面看下RoomListController的代码

fetchAllRooms(); include_once dirname(dirname(__FILE__))."/view/RoomListView.php"; }} $roomController = new RoomListController(); $roomController->displayRoomList(); ?>

   Controller层,起始就是控制界面的输出的,属于Model和View两层之间的桥接。在这里提下我所理解的三层构架和MVC模式的区别---也许并不成熟,那就权当抛砖引玉好了,三层构架可以理解为VCM,即V冲在最前面,M起始就是用来采集数据或者更新数据,C呢,起到了桥接M和V的作用。而MVC,则是C冲在最前面,界面的展现与否,也要C来控制,当然也是桥接MV。

     

      按照这样一个设计,前几个模块,都是这样套用mvc模式来做的,有了这样一个划分,代码整体看起来还是整洁了很多,规范了很多!就在游戏后端的开发中,我们基本上都会定义这样一个规范,以便于出了问题bug,能很快定位,那块出了问题。

     

     写在最后

     也许我对MVC的理解,还是不够准确,也许我对于php的开发,还是很菜鸟级别。但是由菜鸟向大神,由普通向高级的过程中,不重复自己,会让我走的更快。

转载于:https://www.cnblogs.com/archy_yu/p/4229929.html

你可能感兴趣的文章
[摘录]高效人士七习惯—重新探索自我
查看>>
h5手机摇一摇
查看>>
Objective-c——UI基础开发第六天(UITableView)
查看>>
对于大流量网站怎样解决访问量的问题
查看>>
20050419:不是我的错!
查看>>
(亲测修改原创)RHEL6.3修改yum源为centos -163的源
查看>>
9-7测试总结
查看>>
十五、(1)集合Collection
查看>>
Install DB2 V9.5 for Linux(64bit)
查看>>
学习日记0810包,logging模块
查看>>
bzoj千题计划309:bzoj4332: JSOI2012 分零食(分治+FFT)
查看>>
iOS界面传值的方式(7种)
查看>>
将font-size设置为 12px 以下,Chrome浏览器只能显示12px怎么办?
查看>>
Android 系统名字、版本、API level的对应关系
查看>>
胡适致迷茫大学生:成不在一时,功必不唐捐
查看>>
Hadoop 的常用组件一览
查看>>
常用命令之ps
查看>>
Google 招聘(Tech Lead/Manager - Beijing)
查看>>
Python之日志处理(logging模块)
查看>>
Git命令整理
查看>>