再補一張我的MVC基礎架構圖
圖中分Client及Server端
Client端主要是由Web Browser支援的Html、CSS及Javascript
Server端目前是用PHP實作這個MVC的構架,當然無法把詳細的內容全顯示出來(如Exception的統一處理)
但從圖中可以看出User提出一個請求後,會經過一個流程,最後送回到User
右方的Server MVC畫的就是我上面說的雛型架構,當然還有conf設定檔,但我沒畫出來
左方的Client端目前還沒建立一個完整個架構,但HTML CSS及Javascipt都有獨立分開
比較欠缺的是JavaScript的架構,雖然目前依詢一定的流程在走,但有點鬆散所以只把大方向畫出來
- 基礎MVC架構圖
- MVC.jpg (126.08 KiB) 被瀏覽 29018 次
文字大概說明一下
我舉一個發送訊息的例子,以下[]起來的部份是沒畫在圖中的細節
1.User在輸入完訊息後按下發送訊息的Button觸發發送Button的onclick
2.[Javascipt會先判定是否有填寫要發送的訊息,如果沒有就先在Client端顯示警告]
3.透過Ajax的方法把資料傳到Server,這裡我設定的action"動作"是"chat"
4.Server端的Controller接到post['action']是'chat',所以就執行chat function(就是Run Action的地方)
5.[function chat我的第一件事也是判定post['msg']是否有資料,因為光靠Client的判定是靠不住的]
6.接下來function chat中,我們呼叫了一個chat 的Model物件,這個物件專門處理聊天訊息
7.利用這個chat Model把要傳的訊息寫入DB(Insert)
8.然後用chat Model中的取得最新訊息function把要回傳給Client的訊息找出來
9.再透過View的JsonView元件把要傳回給Client的訊息組合JSON Object傳回
10.Client端的Ajax接收到Server的JSON Object後把這個JSON資料丟到Javascript的chat物件
11.Javascript的chat物件會依造Server送來的資更新聊天的訊息到Html上
PS:順便小補充一下
有很多的判斷如果可以的畫先在Client的Javascript先過濾一次,如有沒輸入訊息,等級夠不夠裝備
但在Server還是要再過濾一次,因為Client端的過濾是可以被有心人直接跳過的
也許你會問那就全在Server端過濾就好了不是嗎?我的回答是在大部份正常的情況下
Client的第一道過濾會先撐下大部份的情況,減少不少Server端的負擔
在網站的環境中充滿找漏洞的玩家,但我們不能怪他們,因為寫的程式有漏洞其他玩家才不會管是什麼問題
你就是要對這些漏洞造成的損失負責,有關程式安全的問題可以寫一大篇,要注意都注意不完
但知道一個防一個,減少程式上的漏洞是必然的,以後有機會再跟大家分享