請問以 PHP 設計網站,MVC 中的 controller 是指物件還是頁面?
目前查到的 MVC 各部分的責任是:
models 處理數據
views 呈現數據
controllers 流程控制
想請問是以下哪個方式
方式一
方式二
補充一個例子,把我的疑問說明的詳細一點:
導覽列有三個連結,
<a href='update.php?sheet=brand'>修改品牌</a>
<a href='update.php?sheet=product'>修改產品</a>
<a href='update.php?sheet=customer'>修改客戶</a>
當使用者點擊 "品牌" 項目時,跳到 update.php?sheet=brand,
我想問此時 update.php 內的程式碼應該是上面二個方式之中的哪一個?
方式一是在 update.php 內產生 controller 類別的實例,
用 controller::prepareData() 方法判斷流程分支,
此 prepareData() 方法內每個分支都使用 model 的方法與數據庫互動。
取得數據後,用 controller::makeData() 方法製作表單,
此 makeData() 方法內是轉給 view 來製作表單。
最後用 controller::display() 方法顯示表單在 update.php 上給使用者
方式二沒有 controller 類別
update.php 就是一個 controller,
此頁面直接寫判斷流程、
直接使用 model 的方法與數據庫互動,
直接使用 view 的方法來製作表單。
直接顯示表單。
想請問哪個方式才是正確的?
MVC的核心觀念是低耦合. 低耦合的意義是當要改變什麼, 才做什麼. 聽起來像是沒說什麼?
軟體是工程, 包含生產端到消費端, 有各種管理資訊的方式, 用MVC來進行管理是其中一種:
model和controller都是閘道gateway或路由(router), 形成資訊的供應鏈, 這是分工(division of labor)和去耦合(decoupling)的觀念. 因此, MVC更是一種哲學問題: 怎麼分怎麼合.
依據第一張圖, 您的第一個案例是高度耦合的做法, 但依據您提供的第一個案例, 和第二個案例又一樣, 所以不知內容是什麼, 就href來說明:
'update.php?sheet=brand'
如果update.php是您的資訊路由, 的確是controller. 如果sheet是資訊閘道, 那便是modeler.
但您有在update.php和sheet中進行分工和去耦合嗎? 如果有, 那是真實的MVC.
不知您對頁面及物件的認知為何?
基本上只要是給前端看的頁面都是views, 所以使用者輸入都是views,輸出結果頁面也是 views
control 接收傳送 views 的資訊,做邏輯運算及呼叫model做讀出存入 data
model 專注於資料存放,回應control 的DATA
我不知您的頁面定義,就表面文字意義應該是指給人看的頁面吧 這樣就是 views
關於物件,一般是指一個套件集合,例如一般轎車都有輪胎,一顆輪胎就是一個物件,四個輪胎也就變成轎車基本配備(當然五顆六,,,都可能),引擎是個物件,雖然一台車正常只有一個引擎,,,,
那程式中將重複的變成一個物件,沒重複的也可成為物件,,,這部分自己Google 一下不想長篇大論了
所以重複的部分做出來成為個物件(沒重複的也可成為物件) ,所以用在 views, control , model 都有可能
我的觀念:
所以最重要的是問自己 mvc 為自己帶來了什麼,到底如何設計較為合理。
也許可以試試看同一個網站,分別:不使用框架以及選2個框架各寫一次,應該就會有感覺了。