天天看點

記第二次使用php開發項目之絕不重複自己

      嚴格說起來,自己并非一個合格的php程式員。第一次使用php開發,不過是因為遊戲上線,需要一個統計管理背景和gm背景,因為招聘已經來不及,是以我就上前線了!

      憑着對php文法的一點點記憶(大學的時候學習過),邊看《php與mysql web開發》,就邊上手了!剛開始寫的時候,根本沒有章法,html 和 php直接混在一起,後來邊開發邊琢磨,不能這樣,起碼要界面和邏輯分離一下吧。想起來大學的時候做過asp.net,使用了自己了解的三層構架,那麼就把三層構架引入吧。可是實際的開發過程中,覺得中間邏輯層和資料層實在不想費腦筋分開,就索性用兩層好了,于是就調整成了兩層構架。

  比如我們舉一個例子:我們要做一下金币消耗的統計。

      首先看下 coinscustomview.php:

       再看下 datastaticslogic.php的定義:

 ***view.php 是用來展現資料的代碼,而***logic.php是用來處理邏輯和擷取資料的代碼。就是套用這樣一個簡單的邏輯,基本是面向對象的思想(項目中基本沒有使用php面向對象的思想),完成了第一個php統計背景和gm管理背景!我隻能可能要被php大神恥笑了。大家還是體諒一下一個java程式寫php的苦衷吧!

      很多,我們迎來了第二個項目,第二個項目也需要一個統計背景。當開始着手做這個php統計背景的時候,我自己心中有兩個聲音一直在提醒我。一個是,把原來的項目拔拔,再改吧改吧,繼續套用好了,反正上次也沒有出現什麼問題。第二個聲音就是,專業一點,不要重複自己,使用現在流行的mvc模式,去做這個新的背景,這樣也能完成自己對php的新的認知。很多朋友來提來意見,有的說,代碼技術隻是工具啦,做出來能用就好,而且還是一個内部使用工具,做那麼專業幹嘛,簡單高效是準則! 有的說,直接套用php成熟的架構smarty或者 thinkphp啦。根本不用想太多!

      最終最終還是,奔着絕不重複自己的原則,決定使用mvc模式,把資料,邏輯和界面分開!也趁機好好學習了一下mvc模式,因為畢業以來一直在做伺服器的開發,是以對前段這些架構,雖然他們天天講,可是自己始終不太了解。好吧,趁這次機會,提升自己一下啦。

      那麼我們就拿一個簡單的例子來做參考,來了解一下mvc模式,順便看看新的項目,是如何做子產品的劃分的,如何分離界面,資料和邏輯的!

      首先給我們看下圖:

記第二次使用php開發項目之絕不重複自己

      首先在代碼的組織上,就将業務邏輯和界面分開。關于mvc的示意圖,網上是在是太多了,我就不在這裡貼出來了,大家随便搜搜,大把的圖檔例子和文檔。

      我們用一個擷取所有房間清單的例子來做參考好了!

      首先看下model層,就是所謂業務層,包含room類的設計,還有需要說明的是,curlrequest類,這裡就不貼出來了,就是http請求擷取資料,在這裡相較于前一個項目,很多東西都是封裝成了類!無論是http請求,還是資料庫請求!

      roommodel的職責很簡單,就是獲得所有的房間資料,無論是通過http請求獲得,還是通過mysql資料庫獲得,界面和邏輯層都無從得知。

       下面是界面層:也就是roomview.php的代碼

  view在這裡,就是控制界面,輸出所要展現的資料。

      很多人可能就想,有view和model在這裡,完全不需要controller了吧,起始我覺得也是這樣

      下面看下roomlistcontroller的代碼

 controller層,起始就是控制界面的輸出的,屬于model和view兩層之間的橋接。在這裡提下我所了解的三層構架和mvc模式的差別---也許并不成熟,那就權當抛磚引玉好了,三層構架可以了解為vcm,即v沖在最前面,m起始就是用來采集資料或者更新資料,c呢,起到了橋接m和v的作用。而mvc,則是c沖在最前面,界面的展現與否,也要c來控制,當然也是橋接mv。

      按照這樣一個設計,前幾個子產品,都是這樣套用mvc模式來做的,有了這樣一個劃分,代碼整體看起來還是整潔了很多,規範了很多!就在遊戲後端的開發中,我們基本上都會定義這樣一個規範,以便于出了問題bug,能很快定位,那塊出了問題。

     寫在最後

     也許我對mvc的了解,還是不夠準确,也許我對于php的開發,還是很菜鳥級别。但是由菜鳥向大神,由普通向進階的過程中,不重複自己,會讓我走的更快。