iT邦幫忙

0

ASP.NET MVC 概觀寫得很硬 , 怎麼解讀

  • 分享至 

  • twitterImage

以下是 MVC 解釋得很清楚 , 但我程度差還是看不太懂 , 有人可以白話說明嗎 ?

MVC 架構包括下列元件:
模型。 模型物件屬於實作應用程式資料網域邏輯之應用程式的一部分。 通常,模型物件會擷取和儲存資料庫中的模型狀態。 例如,Product 物件可能從資料庫擷取資訊、操作該資訊,然後將更新的資訊寫回 SQL Server 資料庫的 Products 資料表。
在小型應用程式中,模型通常是概念上的分隔而不是實體分隔。 例如,如果應用程式僅讀取資料集並將它傳送到檢視,則應用程式沒有實體模型層和相關聯的類別。 在這種情況下,資料集會接替模型物件的角色。
檢視。 檢視是顯示應用程式中使用者介面 (UI) 的元件。 通常此 UI 是從模型資料建立。 例如 Products 資料表的編輯檢視,它會根據 Product 物件目前的狀態顯示文字方塊、下拉式清單和核取方塊。
控制器。 控制器就是元件,可以處理使用者互動、使用模型並且在最後選擇可以轉譯要顯示 UI 的檢視。 在 MVC 應用程式中,檢視只會顯示資訊;控制器則會處理和回應使用者輸入和互動。 例如,控制器會處理查詢字串值,並且將這些值傳遞至模型,接著模型可能會使用這些值查詢資料庫。

看更多先前的討論...收起先前的討論...
你去Google 何謂MVC
資訊超多~
也有很多有圖有說明的~
找到一個點進去看~
看不明白就換下一個~
直到你找到一個你看懂的為止~
自己來~印象會更深刻~
順道一提~
現在的你要了解MVC太深入了~~
你得先把你自己的邏輯能力搞定才行!!
MVC是必學~~但不是現在的你就要學得~
循序漸進吧~^_^
簡單一點想.....關注點分離
Model 提供資料、Control 向Model要資料、View 只單純呈現資料。
所以View不需要知道Control是跟誰要的資料
Model也不用管資料是要提供給那個View
View <-> Control <-> Model
擬人化比較懂??

銀行提供金錢交易、儲戶 向銀行 領錢、交易明細單 只單純呈現交易狀況。
所以交易明細單不需要知道儲戶是跟哪個銀行產生的資料
儲戶也不用管哪個銀行是要提供給那個交易明細單
交易明細單<->儲戶 <-> 銀行

(逃....
alex9453 iT邦新手 2 級 ‧ 2017-12-14 18:22:50 檢舉
純真的人 你講得比較容易聽得懂,但是對於我們使用者來講,有mvc跟沒有mvcc是差在哪裡呢?我還感覺不出來
weiclin iT邦高手 4 級 ‧ 2017-12-14 18:42:35 檢舉
良葛隔寫的一篇, 參考看看:https://www.ithome.com.tw/node/77330
alex9453 iT邦新手 2 級 ‧ 2017-12-14 18:43:49 檢舉
king742171我也是看了很多說法,但還是不懂,所以貼上來問
小魚 iT邦大師 1 級 ‧ 2017-12-14 20:46:16 檢舉
我最近鐵人賽剛好在講ASP.NET MVC,可以參考看看,我比較不喜歡去談那些理論的東西,大概知道就好了...
alex9453 iT邦新手 2 級 ‧ 2017-12-14 21:45:31 檢舉
我也不喜歡談理論 , 只是也要知道 MVC 到底是什麼東西
froce iT邦大師 1 級 ‧ 2017-12-14 22:09:17 檢舉
@小魚 我稍微看了一下,覺得我不用asp .net MVC是對的選擇。XD
看完我覺得我不會寫web。><a
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

5
weiclin
iT邦高手 4 級 ‧ 2017-12-14 23:40:51
最佳解答

一言以蔽之,MVC 就是要你把程式裡面關於 UI 的部份給獨立出來,不要把執行工作的程式與顯示畫面的程式碼都混在一起寫。

獨立出來的 UI 部份稱為 View,剩下那部份執行工作的程式就叫做 Model。由於 View 與 Model 應該是要完全獨立不互相依賴的,因此增加一個 Controller 來作為兩者的橋樑。

用個很簡陋的計算加法的例子:

// 取得輸入值
$num1 = $_POST['num1'];
$num2 = $_POST['num2'];

// 計算結果
$result = $num1 + $num2;

// 輸出畫面
echo '<div class="result">', $result, '</div>';

如上,一段程式裡面有負責輸入資料,處理資料,顯示畫面。一般新手入門大概也都是這麼寫的。這麼做有什麼問題網路上已經很多論述了,所以就不再補充。

接著把程式拆分成 View 與 Model,拆分之後看是要變成函式,類別,還是獨立的檔案都行,MVC 本身沒有規定那麼多(但是 MVC Framework 通常會有規範)。

這是 View:

// 取得輸入值
function get_input() {
    return [$_POST['num1'], $_POST['num2']];
}

// 輸出畫面
function display_result($result) {
    echo '<div class="result">', $result, '</div>';
}

Model:

function sum($a, $b) {
    return $a + $b;
}

好了,拆分完了以後誰也不認識誰,不管你是要變更 View 還是變更 Model 都不會影響到另一方。但是你需要一個中間人來整合兩邊的功能,也就是 Controller:

require "view.php"
require "model.php"

$input = get_input();
$result = sum($input[0], $input[1]);
display_result($result);

寫成符合 MVC 模式以後的好處也是網路上一大堆了,所以我只舉一個比較有用的例子。有時我們做網站會有些功能希望以網頁以外的形式執行,例如修改使用者帳號的功能可以從網頁做,也希望可以由終端機執行命令來修改。那如果我們要把上面這個例子的 UI 輸入/輸出改成從終端機呢?

ConsoleView:

// 從終端機取得輸入值
function get_input() {
    global $argv;
    return [$argv[1], $argv[2]];
}

// 輸出畫面
function display_result($result) {
    echo "result is $result\n";
}

Controller 只有更換了 View 的檔案名稱而已,載入不同的 View 就達成了切換使用者界面的需求了。
Controller:

require "consoleview.php"
require "model.php"

$input = get_input();
$result = sum($input[0], $input[1]);
display_result($result);

這就是我個人能最簡化的 MVC 形式。事實上 Controller 與 View 或 Model 之間的溝通方式可以有很多不同的形式,因此有時更換 View 也要一併修改 Controller,同樣更換 Model 也可能要修改 Controller。但是更換 View 絕對不會需要改 Model,反之亦然。

最後提一下,遵照 MVC 的規則設計出來的叫做 MVC Framework。 asp.net MVC 是一種,另外還有各種不同的語言都有各自不同的 MVC Framework。然而並不是用了 MVC Framework 你的程式就符合 MVC 了,用 MVC Framework 寫成一團漿糊的人也不是沒有。

還有,對於 MVC 的 Model 其實有很多的爭議,到底什麼東西該放在 Model 裡面,已經快變成宗教戰爭了。我寫的是其中一種形式而已,你可能還會看到各種各樣不同的論述,不要感到奇怪。

看更多先前的回應...收起先前的回應...
weiclin iT邦高手 4 級 ‧ 2017-12-14 23:49:23 檢舉

再補充一點,MVC 在不同的情境有不同的變化形式。最傳統的 MVC 是用在桌面程式開發的,與寫網頁使用的 MVC 在溝通方面有不同的設計。如果不注意這一點的話可能會在不同的地方感到各種矛盾。但有差異的都是細節,要達成的目的其實是一樣的。

froce iT邦大師 1 級 ‧ 2017-12-15 09:07:58 檢舉

是的,我上面講的忘記補充那是用在WEB開發的狀態了。

alex9453 iT邦新手 2 級 ‧ 2017-12-15 15:27:56 檢舉

weiclin 寫的很詳細,但我還是看不太懂,有人會用擬人化解釋嗎?

alex9453 iT邦新手 2 級 ‧ 2017-12-16 20:04:59 檢舉

MVC 是否是適合中大型專案 , 如果只是小型專案 , 就不須使用 MVC

weiclin iT邦高手 4 級 ‧ 2017-12-17 00:18:13 檢舉

我認為是看專案的生命有多長,需要時常去修改維護的專案就越能體現這些方法的價值。

0
froce
iT邦大師 1 級 ‧ 2017-12-14 20:07:04

Model:資料結構,通常我們會把相關聯的資料放在一起,然後透過簡單的連結去處理一些資料集的一對一、一對多、或多對多的關係。基本上都是資料庫的表格、欄位定義。

View:處理資料呈現,也就是使用者看到的網頁,包含UI/UX、一些需要使用者輸入的資料及驗證工作。通常使用html、javascript、CSS

Controller:負責處理前端瀏覽器輸入的資料,運算後存入資料庫中,各種語言都可以用,看你習慣那種。

為什麼要分成這樣,一方面中、大型專案通常需要分工,這樣可以讓前端和後端同時作業,兩方只要溝通好該呈現的資料就行了。另一方面,這樣可以把不同的程式語言分開,增加可讀性。


PS.這是在web開發這塊的大致劃分。

看更多先前的回應...收起先前的回應...
froce iT邦大師 1 級 ‧ 2017-12-14 20:23:22 檢舉

然後對使用者當然沒有差,使用者看到的只有UI/UX的部分。

alex9453 iT邦新手 2 級 ‧ 2017-12-14 21:35:00 檢舉

UI使用者介面/UX使用者經驗 是這個意思嗎 ?所以用有 MVC 也就是比較有效率就對了 , 只要開專案選有 MVC , 至於其他操作都沒有不同是嗎? 下圖怎麼沒有 MVC , 是我沒安裝嗎 ?
https://ithelp.ithome.com.tw/upload/images/20171214/20104326s1bhqq6pDw.png

alex9453 iT邦新手 2 級 ‧ 2017-12-14 21:37:38 檢舉

https://ithelp.ithome.com.tw/upload/images/20171214/20104326QBiiGldx6J.png

froce iT邦大師 1 級 ‧ 2017-12-14 21:52:33 檢舉

你原本是寫asp .net,現在要寫asp .net MVC?這當然會有差。
我書架上的MVC 5買來都沒翻過,不要問我,我不用windows架站。

另外寫系統的怎樣都不叫使用者。

我要發表回答

立即登入回答