2009
08 10

asp.net MVC framework 初步介紹

14:15:00   閱讀數 ( 573 )   回應數 ( 0 )
使用asp.net MVC開發也一陣子了,一直想要寫一些跟asp.net MVC的文章,
就先來寫篇初步介紹好了,後續我會繼續寫一些相關文章來說明。
 
asp.net MVC 架構示意圖

由上方示意圖我們可以知道,MVC就是Model View Controller的簡稱,
在程式設計裡有許多種的Design Pattern(設計模式),
MVC算是在蠻多應用領域上受重視的Design Pattern其中一種。
 

當然,不止Asp.net有MVC,還有許多程式語言也都有MVC可使用,
不過本文主要目的在於介紹Asp.Net MVC,其他的就不提囉,
另,因為Raz主要是寫Web,所以Raz將以此角度的觀點來說明。


一般在寫Web程式時,收到系統需求、流程分析書之後,
當我們準備開始寫程式之前,會寫好各個業務模型的class以供未來使用,
然後才是資料層、邏輯層、表現層...等等。
(雖然也有Programer是跳過這一步, 直接就寫邏輯了)

要寫MVC的話,就等於業務模型的部份是必需定義的,因為在各個地方都會用到它。

Raz本身是覺得這種方式非常直覺,並且未來若有人接手你的Project,
或是專案必需分工合作時,MVC就是一種絕佳的開發模式,
可以把Model交給資料庫專家,把View交給視覺設計師,
再把Controller交給程式設計師去撰寫邏輯部份。(當然,這只是理想狀況)

 
MVC與WebForm:
上面也有提到,MVC算是另外一種的設計模式,
它沒有像WebForm那樣類似WinForm的開發方式,例如PostBack及事件。
所以較特殊的功能需要你自已寫JavaScript來達成.

微軟在 ASP.NET MVC Overview 中也提到,
The MVC framework does not replace the Web Forms model.
You must consider carefully whether to implement a Web application by using either the ASP.NET MVC framework or the ASP.NET Web Forms model.

所以習慣寫WebForm的也不必認為MVC是必學的,只是多了一種選擇。


MVC的親切感:
不過對於曾寫過asp、php的programer,MVC倒會讓你很有親切感,
因為在View裡面,是Code in Line的寫法,我們來看一段PHP Code..
<?
$MainSQL = "SELECT * FROM `productclass` WHERE Length(SN)=4";
$SearchSQL = "$MainSQL Order By DateTimeCreate Desc, SN ASC Limit 0 , 100 ";
$DataReader = $objConn->query($SearchSQL);

if(!$DataReader) { ?><div>資料讀取錯誤, 請連絡系統管理員</div><? } 
else if($DataReader->num_rows <= 0) { ?><div>目前尚無產品資料</div><? }
else 
{
	$DataVirtualID = ($Page * $PageDataSize) + 1;
	while ($Record = $DataReader->fetch_array())
	{
		$ThisLevel = strlen(trim($Record["SN"])) / 4;
		?>
		<Div>
		<? if ( substr($HTTP_GET_VARS["Class"] , 0 , 4 ) == $Record["SN"]){ ?>
			<b><?=$Record["Name$Lang"]?></b>
		<? } else { ?>
			<a href="<?=$PHP_SELF?>?Class=<?=$Record["SN"]?>">
			<?=$Record["Name$Lang"]?>
			</a>
		<? } ?>
		</Div>
			<?		
		$DataVirtualID++;
	}
}
?>

然後我們再看一段C#寫的MVC Code..
<%
if( Model == null ) { %><div class="Error">目前檢視尚無文章</div><% }
else
{

foreach(MNote Note in Model.PagedList)
{
	String Link = Url.Action("MyAction", new{ NoteID = Note.ID });
%>
<div class="NoteShortGroup">
	<div class="NoteInfo">
		<div class="Calendar">
			<div class="YM"><%=Note.DateTimeCreate.ToString("yyyy-MM")%></div>
			<div class="D"><%=Note.DateTimeCreate.ToString("dd")%></div>
		</div>
		<div class="PostTitle">
		<a href="<%=Link%>" title="<%= Note.Title %>"><%= Note.Title %></a>
		</div>
		<div>
			<input type="button" class="IcoTime" />
			<%=Note.DateTimeCreate.ToString("HH:mm:ss")%>
		</div>
	</div>
	<div class="NoteShort">
	<%= Note.BodyShort %>
	</div>
</div>
<%
}

}
%>

有沒有覺得很熟悉?是的......大師兄回來了...二師兄也...
不好意思,離題了,或許有些人對於這種寫法不抱正面態度,
不過Raz是覺得這種寫法並沒有什麼不好,見人見智囉:)

 
總結:
因為只是初步的介紹,就大概說明到這邊吧,
Raz特別將MVC獨立成一個單元,希望自已能多寫一些MVC相關的東西,
實際上能寫的東西還真的不少,因為要寫MVC有許許多多要注意的地方,
只是因為有點多,一時還真不知從哪寫起,若各位有什麼意見也請告訴我囉:)
 
2009-08-10 14:15:00 By RazgrizHsu       573 Visits

關於站長 About

RazgrizHsu 的大頭照o.o RazgrizHsu
程式設計之偉大航道
其中的一個小設計師
致力於開發技術研究
願能與各位一同成長!

大家來噗浪 Plurk

免責聲明 Disclaimer

  • 本站所轉載或引用之資料,其版權和知識產權屬於原始所有者。
  • 本站雖力求資料準確,但無法保證或擔保全數資料均準確無誤,許多資料具有時效或環境上的不同,在使用本站資料前應先行初步判斷,若是發現問題,歡迎您通知本站。
  • 在任何情況下,因本站所造成的直接、間接、偶然或其他衍生問題,本站不承擔任何責任。
RandomART程式道-88x31連結用Logo
Copyright © Runart.net 暴走的藝術 since 2009 - 2011
Design By Razgriz Hsu, Asp.net MVC 3 & SqlServer 2008R2.