有同感的沒(méi)有?
mvc 到底要怎麼寫呢?
覺(jué)得寫很費(fèi)勁
PHP:
M:
class Teacher {
function add($data) {
$sql = "insert into teacher_table($teacher_name) values($data['teacher_name'])";
return $db->query($sql);
}
}
V:
(省略)
C:
class Teacher {
$data = array("teacher_name"=>$_POST["teacher_name"],....);
$row = new Teacher();
$row->add($data);
echo "Yeah~!";
}
asp.net 沒(méi)有PHP那樣靈活的數(shù)組,m-v-c 之間資料交互傳遞都通過(guò)數(shù)組, asp.net總不能搞個(gè)hashtable 吧? 貌似看教程都是寫的實(shí)體類別
沒(méi)寫過(guò)php,但有ASP.NET MVC的開(kāi)發(fā)經(jīng)驗(yàn),這裡簡(jiǎn)單地說(shuō)一下自己的理解。
先透過(guò)一張圖來(lái)看ASP.NET MVC的互動(dòng)原理:
Model層其實(shí)是一個(gè)很大的概念,包含了服務(wù),業(yè)務(wù)邏輯,數(shù)據(jù)持久化等工作;Controller層則是一個(gè)起到一個(gè)連接Model層和View層的作用;View層就是界面,這點(diǎn)應(yīng)該很清晰的。
透過(guò)你的問(wèn)題描述,比較糾結(jié)的一點(diǎn)是Controller層和View層在做互動(dòng)的時(shí)候,ASP.NET MVC採(cǎi)用的是定義實(shí)體類別(ViewModel)的方式,這讓你覺(jué)得ASP.NET MVC的開(kāi)發(fā)方式很費(fèi)勁。
其實(shí)這個(gè)問(wèn)題是相對(duì)的,首先對(duì)ASP.NET MVC來(lái)說(shuō),基本上每一個(gè)視圖,都要定義一個(gè)ViewModel,這確實(shí)是一個(gè)讓人覺(jué)得很無(wú)趣的地方,但反觀它帶來(lái)的好處:配合Visual Studio,可以在視圖中使用智慧提示(關(guān)於智慧提示這裡就不多展開(kāi)了,用過(guò)都說(shuō)好)!這樣就可以避免php數(shù)組$data['xxx']中的魔幻字串問(wèn)題(例如應(yīng)該寫$data['teacher'],由於一不小心寫錯(cuò)$data['teach'],帶來(lái)了更多出錯(cuò)的可能,其實(shí)不覺(jué)得寫這些字串也是一件很無(wú)趣的事情嗎?
假如你覺(jué)得還是陣列的方式好,其實(shí)ASP.NET MVC中也是可以做到的,可以在Controller類別中使用TempData,例如:
public ActionResult List()
{
TempData["hello"] = "world";
return View();
}
這樣視圖層也可以透過(guò)TempData[]取得資料。
在.Net中,你的$data可以用型別Dictionary
一點(diǎn)都不方便,在IDE裡面沒(méi)有自動(dòng)完成提示,沒(méi)有靜態(tài)檢查。
我用過(guò)很久的asp.net mvc
,現(xiàn)在用php
的yii
,兩者幾乎完全一樣的思想。所以不是說(shuō)框架哪個(gè)更方便,而是語(yǔ)言哪個(gè)更方便。我個(gè)人也覺(jué)得php
確實(shí)比C#
要方便很多,就像你說(shuō)的,數(shù)組靈活,json
靈活,.net
現(xiàn)在也有dynamic
類型,但是不感冒,感覺(jué)生硬。另外一個(gè)拋棄微軟的理由就是覺(jué)得太麻煩,太封閉,就是不愿意用windows
,干嘛要用宇宙第一IDE(visual studio)?老子就是只愿意在linux
下用vim
,沒(méi)別的。