SlideShare a Scribd company logo
利用 ASP.NET MVC 提升您的 Web 應用程式
利用 ASP.NET MVC 提升您的 Web 應用程式董大偉 David@studyhost.com台灣微軟MSDN講座講師TechED 2007, 2008講師
Develop Web Application with ASP.NET MVC本場次大綱從5W1H看ASP.NET MVC什麼是MVC? 透過這樣的架構開發的應用程式有何優點?ASP.NET MVC Framework又是什麼?和ASP.NET WebForm技術不同嗎?如何利用ASP.NET MVC來開發MVC應用程式?如何撰寫出較好的Web應用程式?
解決方案總是從問題而來 - Develop Web Application with ASP.NET MVC ASP.NET MVC的 5W 1HWHAT   - 什麼是ASP.NET MVC?WHEN   - 何時需要使用ASP.NET MVC?WHY      - 為何要使用ASP.NET MVC?WHO     - 誰適合來使用ASP.NET MVC?WHERE - 在些場合中需要使用ASP.NET MVC?HOW     - 如何開發ASP.NET MVC 應用程式?
What's ASP.NET MVC?- Techniques For Developing MVC Web Applications
什麼是MVC? - Develop Web Application with ASP.NET MVC MVC…是一種設計模式。MVC這個Pattern要求我們在開發程式的時候,把我們要透過程式碼達成的一個功能,在設計時切割成Model、View、Controller這三個部分(的程式碼)。每一個部分可以獨立互不干涉,但執行時可以互相合作,已達成功能,開發時亦可由不同的開發人員進行開發、同時也便於Unit Test。目的:降低程式碼之間的相依性、提高重用性便於多人開發、單元測試、降低開發成本結構清晰、利於後續維護…
什麼是MVC? - Develop Web Application with ASP.NET MVC
什麼是MVC? - Develop Web Application with ASP.NET MVC ASP.NET MVC微軟平台上新提供的MVC開發架構,透過這組類別庫,開發人員可以MVC架構來建立Web應用程式。這組MVC架構可以同時提高程式的延展性與彈性,降低.aspx頁面與後端資料庫、商業邏輯之間的相依性,達成大型專案的快速開發、高重用性、容易調整與維護的目的。
什麼是ASP.NET MVC Framework- Develop Web Application with ASP.NET MVCASP.NET MVC Framework是…架構在ASP.NET技術上的一組Framework。讓開發人員得以輕鬆建立出MVC架構的應用程式。提供建構MVC應用程式所需的基礎類別、以及相關工具(Helper) 。概念上與ASP.NET WebForm並不相同,不支援事件驅動、Web Controls、或是Postback…等機制。支援了一些ASP.NET過去相當優秀的設計,例如Master-Page、MemberShip、UserControl等機制。
ASP.NET MVC Framework
ASP.NET MVC FrameworkModelsViewsControllersPost.aspxData ModelGetLinqToSql(.dbml).aspx.aspxViewDataADO.NET Entity Framework(.edmx)
MVC三合一應用程式Protected Sub Button_GetBMI_Click(ByValsender As Object, ByVale As EventArgs) Handles Button_GetBMI.Click        Dim BMI As Single        Dim height, weight As Single'從UI取得身高體重        height = Me.TextBox_Height.Text        weight = Me.TextBox_Weight.Text'計算BMI(主要邏輯運算)        BMI = weight / (height / 100) ^ 2'顯示BMIMe.Label_Result.Text = "計算結果 BMI=" & BMI‘將資料儲存到資料庫SqlDataSource1.InsertCommand = "Insert into BmiData (Height,Weight,BMI) values (@Height,@Weight,@BMI)"        SqlDataSource1.InsertParameters.Add("Height", height)SqlDataSource1.InsertParameters.Add("Weight", weight)        SqlDataSource1.InsertParameters.Add("BMI", BMI)'顯示訊息If SqlDataSource1.Insert() > 0 ThenClientScript.RegisterStartupScript(Me.GetType, "", "alert('儲存成功');", True)        ElseClientScript.RegisterStartupScript(Me.GetType, "", "alert('儲存失敗');", True)        End If這種程式我們稱為:MVC三合一寫法『一氣呵成』、從前端殺到後端的『直搗狂龍式』寫法ClassicBmiWebAP
MVC三合一的問題- Develop Web Application with ASP.NET MVC在同一個事件當中, 又處理UI, 又處理邏輯, 又存取DB前端.aspx頁面與後端資料庫密不可分前端.aspx頁面與後端商業邏輯程式碼難分難捨即使具有DataAccess Class也難免保證開發人員遵循(*)牽一髮而動全身
MVC三合一的問題- Develop Web Application with ASP.NET MVC應該如何改進?將Business Logic獨立出來將資料庫存取部分獨立出來結果:程式碼相依性降低、可重用性提高程式碼變多?效能會提升嗎?
DEMO:調整MVC三合一程式,使之將Business Logic獨立出來
將資料庫存取部分獨立出來
程式碼相依性降低、可重用性提高D:\MyDoc\0T.教育訓練\Microsoft MSDN講座-ASP.NET MVC\ClassicBmiWebAP2
MVC的目的- Develop Web Application with ASP.NET MVC避免在同一段程式碼當中, 又處理UI, 又處理邏輯, 又存取DB…降低程式之間的相依性、提高重用性讓程式碼結構更加清晰不同的模塊可由擅長該技術的專職開發人員進行開發,降低開發成本,提高產能便於Unit Test、使TDD成為可能
ASP.NET MVC Framework
ASP.NET MVC FrameworkModelsViewsControllersPost.aspxData ModelGetLinqToSql(.dbml).aspx.aspxViewDataADO.NET Entity Framework(.edmx)
DEMO:建構第一個MVC應用程式建立ASP.NET MVC Web Application
建立BMI Controller與Index Action
建立ViewPage(含欄位)
撰寫BMI Class
在Controller中接收參數調用BMI Class, 輸出結果D:\MyDoc\0T.教育訓練\Microsoft MSDN講座-ASP.NET MVC\BmiMvcApp
MVC希望在程式面達成的效果
View與Business Login、Model之間徹底脫鉤絕緣
透過Controller轉派
資料來源: http://images.google.com.tw/imgres?imgurl=http://ash-mvc.org/media/Image/ash-mvc-architecture.gif&imgrefurl=http://ash-mvc.org/&h=301&w=351&sz=15&hl=zh-TW&start=2&tbnid=SgcaMgMTQ1kRfM:&tbnh=103&tbnw=120&prev=/images%3Fq%3DMVC%26gbv%3D2%26complete%3D1%26hl%3Dzh-TWASP.NET MVC Framework
認識Controller- Develop Web Application with ASP.NET MVC負責接收Browser端透過HTTP GET/POST傳來的RequestUrl可決定該Request由哪一個Controller、哪一個Action來負責Controller當中可以進行各種運算、亦可能包含商業邏輯、各種演算法…等程式碼。如果有需要,可調用Model來進行後端資料庫存取的動作。最後決定由哪一個View來處理結果的呈現。同時將View需要呈現的資料透過ViewData傳遞給View。
關於URL Routing- Develop Web Application with ASP.NET MVCURL Routing機制負責將Browser傳來的Request對應到Controller與Action。在這種設計架構下,我們可以用同一個『頁面』負責同一種『工作』 。可降低頁面的數量,每一個頁面(View)清楚的負責一種『功能』,不需要撰寫許多頁面負責同樣的功能(例如不同資料表的顯示)。URL直接對應到『功能』 ,在邏輯上更加直覺。http://localhost:50302/bmi/indexActionControllerWeb Site
認識Controller- Develop Web Application with ASP.NET MVCController中程式碼的撰寫方式, 同名處理不同的Verbs' HTTP GET: /Bmi/IndexFunction Index() AsActionResult            (…略…)Return View()EndFunction' HTTP POST: /Bmi/Index    <AcceptVerbs(HttpVerbs.Post)> _FunctionIndex(ByValTxbHeightAs Single, ByValTxbWeightAs Single) As ActionResult            (…略…)Return View()EndFunction使用預設的View(也就是BMI/Index.aspx)來回應從View欄位接收參數
關於URL Routing- Develop Web Application with ASP.NET MVC例如,底下的URL可以用來顯示編號為17的產品:請注意Global.asax檔案(設定Url Route, 底下為預設)http://store.abc.com/product/ShowDetails/17ActionIDWeb SiteControllerroutes.MapRoute( _     "Default", _"{controller}/{action}/{id}", _New With {.controller = "Home",.action = "Index",.id = ""} _)
認識Controller- Develop Web Application with ASP.NET MVCController中程式碼的撰寫方式各種ActionResultViewResult, EmptyResult, RedirectResult, JavaScriptResult, ContentResult, FileContentResult, FilePathresult, FileStreamResult, …' GET: /product/ShowDetailsFunctionShowDetails(ID As Integer) AsActionResult	'取得ID	'透過Data Model抓取資料庫中的內容	‘將資料傳遞給ViewPageReturn View()EndFunction
Controller如何與View溝通?- Develop Web Application with ASP.NET MVC抓取ViewPage上的欄位值' POST: /Bmi/Index    <AcceptVerbs(HttpVerbs.Post)> _Function Index(ByValTxbHeightAs Single, ByValTxbWeight As Single) As ActionResult             (…略…)'使用預設的VIewReturn View()    End Function
Controller如何與View溝通?- Develop Web Application with ASP.NET MVC透過ViewData將資料傳給ViewPage' POST: /Bmi/Index    <AcceptVerbs(HttpVerbs.Post)> _Function Index(ByValTxbHeight As Single, ByValTxbWeight As Single) As ActionResult        Dim BMI As Single        Dim MyBMIAs New BMI'使用BMI類別進行運算MyBMI.Height = TxbHeightMyBMI.Weight = TxbWeight        BMI = MyBMI.GetBMI()'將執行結果傳遞給ViewViewData("result") = BMI'使用預設的VIewReturn View()    End Function
Controller如何與View溝通?- Develop Web Application with ASP.NET MVC透過ViewData將資料傳給ViewPage' POST: /Bmi/Index    <AcceptVerbs(HttpVerbs.Post)> _Function Index(ByValTxbHeight As Single, ByValTxbWeight As Single) As ActionResult	(…略…)Return View(Model)    End Function可傳遞任何的物件給ViewPage
認識Controller - Develop Web Application with ASP.NET MVC建立在Controllers資料夾中繼承自System.Web.Mvc.Controller負責回應Browser的各種Request如何從ViewPage接收參數?透過ID、透過ViewPage上的欄位如何傳遞參數給ViewPage?透過ViewData、透過ViewResult的Model參數
認識ViewPage- Develop Web Application with ASP.NET MVC負責展示層UI的顯示。與商業邏輯運算、後端資料庫均無關。在這個部分當中可以有程式碼,但程式碼只應該與UI(或UI上的操作)有關,不應該有任何與商業邏輯、後端資料庫有關的任何程式碼,對於Web應用程式來說,主要就是Render出HTML與前端JavaScript操作的部分。繼承於System.Web.Mvc.ViewPage 。可透過ViewData取得來自Controller的資料。可透過Model取得來自Controller的複雜資料。具有HtmlHelper可使用,便於開發。
認識ViewPage- Develop Web Application with ASP.NET MVC與過去ASP類似的程式撰寫方式可透過HTML Helper協助產生需要的Html Element不支援Web Controls可透過ViewData抓取到Controller傳遞過來的資料 <% Using Html.BeginForm() %><br/>身高:<% =Html.TextBox("TxbHeight") %><br/>體重:<% =Html.TextBox("TxbWeight") %><input type="submit" value="Calculate" /><% End Using%><% If ViewData("result")IsNot Nothing Then Response.Write("BMI:" & ViewData("result")) %>
認識ViewPage- Develop Web Application with ASP.NET MVCHtml Helper支援…Html.ActionLink(linkText,ActionName,ControllerName)Html.TextBox(name)Html.TextArea(name)Html.RadioButton(name,value)Html.BeginForm()Html.Encode(value)…
DEMO:將MVC應用程式加入資料庫存取使用先前的BmiMvcApp
加入資料庫
調整ViewPage(新增欄位)

More Related Content

PDF
Asp.Net Mvc 1.0
PPTX
twMVC#01 | ASP.NET MVC 的第一次親密接觸
PDF
ASP.NET MVC之實戰架構探討 -twMVC#5
PDF
AngularJS 開發 ASP.NET MVC -twMVC#9
PDF
ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰 -twMVC#3
PDF
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
PDF
使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日
PDF
twMVC#05 |開發與移轉 ASP.NET MVC 4.0 應用程式到 Windows Azure Platform
Asp.Net Mvc 1.0
twMVC#01 | ASP.NET MVC 的第一次親密接觸
ASP.NET MVC之實戰架構探討 -twMVC#5
AngularJS 開發 ASP.NET MVC -twMVC#9
ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰 -twMVC#3
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日
twMVC#05 |開發與移轉 ASP.NET MVC 4.0 應用程式到 Windows Azure Platform

What's hot (18)

PDF
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
PDF
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
PDF
Asp.net mvc 從無到有 -twMVC#2
PDF
架構行動式網站(使用 ASP.NET MVC 4.0 -twMVC#6
PPTX
Mvc架構說明
PDF
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
PDF
Single-Page Application Design Principles 101
PPTX
前端Mvc探讨及实践
PDF
ASP.NET MVC Code Templates實戰開發 -twMVC#4
PDF
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
PDF
ASP.NET MVC Model 的設計與使用 twMVC#10
PPTX
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
PDF
WoT Frotend 的設計與實作
PPTX
輕鬆上手ASP.NET Web API 2.1.2
PPTX
Study4 love.2016.2.20.ionic
PPTX
ASP.NET MVC 善用網路資源快速完打造網站
PPTX
Asp.Net MVC 一教就上手
PPTX
基于Silverlight的RIA架构及百度应用
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
Asp.net mvc 從無到有 -twMVC#2
架構行動式網站(使用 ASP.NET MVC 4.0 -twMVC#6
Mvc架構說明
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
Single-Page Application Design Principles 101
前端Mvc探讨及实践
ASP.NET MVC Code Templates實戰開發 -twMVC#4
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
ASP.NET MVC Model 的設計與使用 twMVC#10
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
WoT Frotend 的設計與實作
輕鬆上手ASP.NET Web API 2.1.2
Study4 love.2016.2.20.ionic
ASP.NET MVC 善用網路資源快速完打造網站
Asp.Net MVC 一教就上手
基于Silverlight的RIA架构及百度应用
Ad

Viewers also liked (17)

PPTX
如何輕鬆快速開發報表:談 SQL Server 2008 報表開發
PPS
Catlins 最南的海岸線
DOC
PPS
Good Advise
DOC
14.淺談Ddr2 Sdram
PPS
說對了話,無價!
PDF
Windows Mobile 多媒體應用程式開發
DOC
08.如何利用Netstat指令及Windows工作管理員來排解網路連線異常的狀況?
PPSX
董大偉,Silverlight3 技術講座
PDF
Windows 7兼容性系列课程(2):Windows 7用户权限控制 (UAC)
PDF
以 .NET RIA Services 打通 Silverlight 分散式開發之任督二脈
PDF
海角七號
PPT
腰酸背痛
PPTX
Api Code Pack For Net Framework
PPT
墾丁 更新版
DOC
PDF
移動內存算法
如何輕鬆快速開發報表:談 SQL Server 2008 報表開發
Catlins 最南的海岸線
Good Advise
14.淺談Ddr2 Sdram
說對了話,無價!
Windows Mobile 多媒體應用程式開發
08.如何利用Netstat指令及Windows工作管理員來排解網路連線異常的狀況?
董大偉,Silverlight3 技術講座
Windows 7兼容性系列课程(2):Windows 7用户权限控制 (UAC)
以 .NET RIA Services 打通 Silverlight 分散式開發之任督二脈
海角七號
腰酸背痛
Api Code Pack For Net Framework
墾丁 更新版
移動內存算法
Ad

Similar to 利用 ASP.NET MVC 提升您的 Web 應用程式 (20)

PPTX
Asp.net mvc 基礎
PDF
Asp.net+mvc4框架揭秘
PDF
twMVC#02 | ASP.NET MVC 從無到有
PDF
Asp.net mvc網站的從無到有
PDF
twMVC#10 | ASP.NET MVC Model 的設計與使用
PPT
建站大业,实战ASP.NET 4
PDF
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
PPTX
Asp.net mvc 概觀介紹
PDF
Real World ASP.NET MVC
PDF
ASP.NET MVC The Begining
PDF
20130823微軟雲端平台開發者日
PPTX
Angular.js & ASP.NET in Study4
PDF
ASP.Net MVC2 简介
PDF
twMVC#03 | ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰
PDF
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
PPTX
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
PDF
輕鬆上手Asp.net web api 2.1-twMVC#14
PDF
twMVC#14 | 輕鬆上手ASP.NET Web API 2
PDF
Non-MVC Web Framework
PPTX
ASP.NET MVC (Gi Days)
Asp.net mvc 基礎
Asp.net+mvc4框架揭秘
twMVC#02 | ASP.NET MVC 從無到有
Asp.net mvc網站的從無到有
twMVC#10 | ASP.NET MVC Model 的設計與使用
建站大业,实战ASP.NET 4
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
Asp.net mvc 概觀介紹
Real World ASP.NET MVC
ASP.NET MVC The Begining
20130823微軟雲端平台開發者日
Angular.js & ASP.NET in Study4
ASP.Net MVC2 简介
twMVC#03 | ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
輕鬆上手Asp.net web api 2.1-twMVC#14
twMVC#14 | 輕鬆上手ASP.NET Web API 2
Non-MVC Web Framework
ASP.NET MVC (Gi Days)

More from Chui-Wen Chiu (20)

ODP
Dynamic Python
ODP
Pythonpresent
ODP
Introduce Django
PPT
墾丁 更新版2
PDF
PPT
高雄新地標 統一夢世代
PDF
Borland傳奇
PDF
Python 庫簡介
PDF
天下第一 夜市總冠軍
PPT
下班就跑是富有哲學道理1
PDF
認識腸病毒
PDF
排隊的店
PPS
柬埔寨鄉村婚禮
PPS
新 創 意
PPT
挖好屬於自己的井
PPS
Why The Us Wants War 080702
PPS
你今天的選擇是什麼?
DOC
我的學思歷程 劉兆玄
PPT
Unknown Parameter Value
PPS
你也在井裡嗎
Dynamic Python
Pythonpresent
Introduce Django
墾丁 更新版2
高雄新地標 統一夢世代
Borland傳奇
Python 庫簡介
天下第一 夜市總冠軍
下班就跑是富有哲學道理1
認識腸病毒
排隊的店
柬埔寨鄉村婚禮
新 創 意
挖好屬於自己的井
Why The Us Wants War 080702
你今天的選擇是什麼?
我的學思歷程 劉兆玄
Unknown Parameter Value
你也在井裡嗎

利用 ASP.NET MVC 提升您的 Web 應用程式

  • 2. 利用 ASP.NET MVC 提升您的 Web 應用程式董大偉 [email protected]台灣微軟MSDN講座講師TechED 2007, 2008講師
  • 3. Develop Web Application with ASP.NET MVC本場次大綱從5W1H看ASP.NET MVC什麼是MVC? 透過這樣的架構開發的應用程式有何優點?ASP.NET MVC Framework又是什麼?和ASP.NET WebForm技術不同嗎?如何利用ASP.NET MVC來開發MVC應用程式?如何撰寫出較好的Web應用程式?
  • 4. 解決方案總是從問題而來 - Develop Web Application with ASP.NET MVC ASP.NET MVC的 5W 1HWHAT - 什麼是ASP.NET MVC?WHEN - 何時需要使用ASP.NET MVC?WHY - 為何要使用ASP.NET MVC?WHO - 誰適合來使用ASP.NET MVC?WHERE - 在些場合中需要使用ASP.NET MVC?HOW - 如何開發ASP.NET MVC 應用程式?
  • 5. What's ASP.NET MVC?- Techniques For Developing MVC Web Applications
  • 6. 什麼是MVC? - Develop Web Application with ASP.NET MVC MVC…是一種設計模式。MVC這個Pattern要求我們在開發程式的時候,把我們要透過程式碼達成的一個功能,在設計時切割成Model、View、Controller這三個部分(的程式碼)。每一個部分可以獨立互不干涉,但執行時可以互相合作,已達成功能,開發時亦可由不同的開發人員進行開發、同時也便於Unit Test。目的:降低程式碼之間的相依性、提高重用性便於多人開發、單元測試、降低開發成本結構清晰、利於後續維護…
  • 7. 什麼是MVC? - Develop Web Application with ASP.NET MVC
  • 8. 什麼是MVC? - Develop Web Application with ASP.NET MVC ASP.NET MVC微軟平台上新提供的MVC開發架構,透過這組類別庫,開發人員可以MVC架構來建立Web應用程式。這組MVC架構可以同時提高程式的延展性與彈性,降低.aspx頁面與後端資料庫、商業邏輯之間的相依性,達成大型專案的快速開發、高重用性、容易調整與維護的目的。
  • 9. 什麼是ASP.NET MVC Framework- Develop Web Application with ASP.NET MVCASP.NET MVC Framework是…架構在ASP.NET技術上的一組Framework。讓開發人員得以輕鬆建立出MVC架構的應用程式。提供建構MVC應用程式所需的基礎類別、以及相關工具(Helper) 。概念上與ASP.NET WebForm並不相同,不支援事件驅動、Web Controls、或是Postback…等機制。支援了一些ASP.NET過去相當優秀的設計,例如Master-Page、MemberShip、UserControl等機制。
  • 11. ASP.NET MVC FrameworkModelsViewsControllersPost.aspxData ModelGetLinqToSql(.dbml).aspx.aspxViewDataADO.NET Entity Framework(.edmx)
  • 12. MVC三合一應用程式Protected Sub Button_GetBMI_Click(ByValsender As Object, ByVale As EventArgs) Handles Button_GetBMI.Click Dim BMI As Single Dim height, weight As Single'從UI取得身高體重 height = Me.TextBox_Height.Text weight = Me.TextBox_Weight.Text'計算BMI(主要邏輯運算) BMI = weight / (height / 100) ^ 2'顯示BMIMe.Label_Result.Text = "計算結果 BMI=" & BMI‘將資料儲存到資料庫SqlDataSource1.InsertCommand = "Insert into BmiData (Height,Weight,BMI) values (@Height,@Weight,@BMI)" SqlDataSource1.InsertParameters.Add("Height", height)SqlDataSource1.InsertParameters.Add("Weight", weight) SqlDataSource1.InsertParameters.Add("BMI", BMI)'顯示訊息If SqlDataSource1.Insert() > 0 ThenClientScript.RegisterStartupScript(Me.GetType, "", "alert('儲存成功');", True) ElseClientScript.RegisterStartupScript(Me.GetType, "", "alert('儲存失敗');", True) End If這種程式我們稱為:MVC三合一寫法『一氣呵成』、從前端殺到後端的『直搗狂龍式』寫法ClassicBmiWebAP
  • 13. MVC三合一的問題- Develop Web Application with ASP.NET MVC在同一個事件當中, 又處理UI, 又處理邏輯, 又存取DB前端.aspx頁面與後端資料庫密不可分前端.aspx頁面與後端商業邏輯程式碼難分難捨即使具有DataAccess Class也難免保證開發人員遵循(*)牽一髮而動全身
  • 14. MVC三合一的問題- Develop Web Application with ASP.NET MVC應該如何改進?將Business Logic獨立出來將資料庫存取部分獨立出來結果:程式碼相依性降低、可重用性提高程式碼變多?效能會提升嗎?
  • 18. MVC的目的- Develop Web Application with ASP.NET MVC避免在同一段程式碼當中, 又處理UI, 又處理邏輯, 又存取DB…降低程式之間的相依性、提高重用性讓程式碼結構更加清晰不同的模塊可由擅長該技術的專職開發人員進行開發,降低開發成本,提高產能便於Unit Test、使TDD成為可能
  • 20. ASP.NET MVC FrameworkModelsViewsControllersPost.aspxData ModelGetLinqToSql(.dbml).aspx.aspxViewDataADO.NET Entity Framework(.edmx)
  • 30. 認識Controller- Develop Web Application with ASP.NET MVC負責接收Browser端透過HTTP GET/POST傳來的RequestUrl可決定該Request由哪一個Controller、哪一個Action來負責Controller當中可以進行各種運算、亦可能包含商業邏輯、各種演算法…等程式碼。如果有需要,可調用Model來進行後端資料庫存取的動作。最後決定由哪一個View來處理結果的呈現。同時將View需要呈現的資料透過ViewData傳遞給View。
  • 31. 關於URL Routing- Develop Web Application with ASP.NET MVCURL Routing機制負責將Browser傳來的Request對應到Controller與Action。在這種設計架構下,我們可以用同一個『頁面』負責同一種『工作』 。可降低頁面的數量,每一個頁面(View)清楚的負責一種『功能』,不需要撰寫許多頁面負責同樣的功能(例如不同資料表的顯示)。URL直接對應到『功能』 ,在邏輯上更加直覺。http://localhost:50302/bmi/indexActionControllerWeb Site
  • 32. 認識Controller- Develop Web Application with ASP.NET MVCController中程式碼的撰寫方式, 同名處理不同的Verbs' HTTP GET: /Bmi/IndexFunction Index() AsActionResult (…略…)Return View()EndFunction' HTTP POST: /Bmi/Index <AcceptVerbs(HttpVerbs.Post)> _FunctionIndex(ByValTxbHeightAs Single, ByValTxbWeightAs Single) As ActionResult (…略…)Return View()EndFunction使用預設的View(也就是BMI/Index.aspx)來回應從View欄位接收參數
  • 33. 關於URL Routing- Develop Web Application with ASP.NET MVC例如,底下的URL可以用來顯示編號為17的產品:請注意Global.asax檔案(設定Url Route, 底下為預設)http://store.abc.com/product/ShowDetails/17ActionIDWeb SiteControllerroutes.MapRoute( _ "Default", _"{controller}/{action}/{id}", _New With {.controller = "Home",.action = "Index",.id = ""} _)
  • 34. 認識Controller- Develop Web Application with ASP.NET MVCController中程式碼的撰寫方式各種ActionResultViewResult, EmptyResult, RedirectResult, JavaScriptResult, ContentResult, FileContentResult, FilePathresult, FileStreamResult, …' GET: /product/ShowDetailsFunctionShowDetails(ID As Integer) AsActionResult '取得ID '透過Data Model抓取資料庫中的內容 ‘將資料傳遞給ViewPageReturn View()EndFunction
  • 35. Controller如何與View溝通?- Develop Web Application with ASP.NET MVC抓取ViewPage上的欄位值' POST: /Bmi/Index <AcceptVerbs(HttpVerbs.Post)> _Function Index(ByValTxbHeightAs Single, ByValTxbWeight As Single) As ActionResult (…略…)'使用預設的VIewReturn View() End Function
  • 36. Controller如何與View溝通?- Develop Web Application with ASP.NET MVC透過ViewData將資料傳給ViewPage' POST: /Bmi/Index <AcceptVerbs(HttpVerbs.Post)> _Function Index(ByValTxbHeight As Single, ByValTxbWeight As Single) As ActionResult Dim BMI As Single Dim MyBMIAs New BMI'使用BMI類別進行運算MyBMI.Height = TxbHeightMyBMI.Weight = TxbWeight BMI = MyBMI.GetBMI()'將執行結果傳遞給ViewViewData("result") = BMI'使用預設的VIewReturn View() End Function
  • 37. Controller如何與View溝通?- Develop Web Application with ASP.NET MVC透過ViewData將資料傳給ViewPage' POST: /Bmi/Index <AcceptVerbs(HttpVerbs.Post)> _Function Index(ByValTxbHeight As Single, ByValTxbWeight As Single) As ActionResult (…略…)Return View(Model) End Function可傳遞任何的物件給ViewPage
  • 38. 認識Controller - Develop Web Application with ASP.NET MVC建立在Controllers資料夾中繼承自System.Web.Mvc.Controller負責回應Browser的各種Request如何從ViewPage接收參數?透過ID、透過ViewPage上的欄位如何傳遞參數給ViewPage?透過ViewData、透過ViewResult的Model參數
  • 39. 認識ViewPage- Develop Web Application with ASP.NET MVC負責展示層UI的顯示。與商業邏輯運算、後端資料庫均無關。在這個部分當中可以有程式碼,但程式碼只應該與UI(或UI上的操作)有關,不應該有任何與商業邏輯、後端資料庫有關的任何程式碼,對於Web應用程式來說,主要就是Render出HTML與前端JavaScript操作的部分。繼承於System.Web.Mvc.ViewPage 。可透過ViewData取得來自Controller的資料。可透過Model取得來自Controller的複雜資料。具有HtmlHelper可使用,便於開發。
  • 40. 認識ViewPage- Develop Web Application with ASP.NET MVC與過去ASP類似的程式撰寫方式可透過HTML Helper協助產生需要的Html Element不支援Web Controls可透過ViewData抓取到Controller傳遞過來的資料 <% Using Html.BeginForm() %><br/>身高:<% =Html.TextBox("TxbHeight") %><br/>體重:<% =Html.TextBox("TxbWeight") %><input type="submit" value="Calculate" /><% End Using%><% If ViewData("result")IsNot Nothing Then Response.Write("BMI:" & ViewData("result")) %>
  • 41. 認識ViewPage- Develop Web Application with ASP.NET MVCHtml Helper支援…Html.ActionLink(linkText,ActionName,ControllerName)Html.TextBox(name)Html.TextArea(name)Html.RadioButton(name,value)Html.BeginForm()Html.Encode(value)…
  • 46. 認識Model - Develop Web Application with ASP.NET MVC負責了實際資料庫存取的部分。這部分的程式碼負責把後端資料庫給封裝起來,讓Controller或View可以完全不(需要)知道(或不在乎)後端資料庫的長相究竟為何,只需要透過Model即可正確的存取後端資料庫。有效的隔離展示層程式碼與後端資料庫可透過Bind修飾字將ViewPage上的資料繫結到Controller的參數,以便於儲存到DBContoller中可透過ViewResult的Model參數將從DB取得的資料以物件型態傳遞給ViewPage。(請注意ViewPage須設定泛型型別)
  • 47. 認識Model - Develop Web Application with ASP.NET MVCContoller中可透過ViewResult的Model參數將從DB取得的資料,以物件型態傳遞給ViewPage。(請注意ViewPage須設定泛型型別) Dim db As New AddressBookDBDataContext' ' HTTP GET: /AddressBook/Function Index() As ActionResult Return View(db.AddressBook.ToList) End Function
  • 48. 認識Model - Develop Web Application with ASP.NET MVC承接的ViewPage,需要設定泛型型別,以便於取得資料<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of IEnumerable (Of AddressBookMvcApp.AddressBook))" %><% For Each item In Model%> <tr> <td> <%=Html.ActionLink("Edit", "Edit", New With {.id = item.uid})%> | <%=Html.ActionLink("Details", "Details", New With {.id = item.uid})%> </td> <td> <%= Html.Encode(item.uid) %> </td> <td> <%= Html.Encode(item.cName) %> </td> <td> <%= Html.Encode(item.cTel) %> </td> <td> <%= Html.Encode(item.cMemo) %> </td> </tr> <% Next%> </table></asp:Content>
  • 49. 認識Model - Develop Web Application with ASP.NET MVC儲存(回寫)資料時,亦可透過Bind修飾字將ViewPage上的資料繫結到Controller的參數,以便於儲存到DB。 'Post: /Home/Create<AcceptVerbs(HttpVerbs.Post)> _Function Create(<Bind(exclude:="uid")>ByValTableData As AddressBookMvcApp.AddressBook) As ActionResultdb.AddressBook.InsertOnSubmit(TableData)db.SubmitChanges() Return RedirectToAction("Index")End Function
  • 58. 關於Unit Test- Develop Web Application with ASP.NET MVC由於View與Business Logic已經切割開來, 有助於Unit Test的進行。 <TestMethod()> Public Sub TestMethod1() Dim theBmiControllerAs New BmiController Dim theViewResult As ViewResult = theBmiController.Index(170, 70)Assert.AreEqual("24.22145", theViewResult.ViewData("result").ToString)End SubD:\MyDoc\0T.教育訓練\Microsoft MSDN講座-ASP.NET MVC\BmiMvcApp
  • 59. 解決方案總是從問題而來 - Develop Web Application with ASP.NET MVC ASP.NET MVC的 5W 1HWHAT - 什麼是ASP.NET MVC?WHEN - 何時需要使用ASP.NET MVC?WHY - 為何要使用ASP.NET MVC?WHO - 誰適合來使用ASP.NET MVC?WHERE - 在些場合中需要使用ASP.NET MVC?HOW - 如何開發ASP.NET MVC 應用程式?
  • 61. ASP.NET MVC相關資源筆者 BLOG http://blog.studyhost.com/筆者 RUN!PC ASP.NET 3.5 SP1-4.0專欄ASP.NET網站MVC篇:http://www.asp.net/mvc/
  • 63. © 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Editor's Notes

  • #16: 介紹現成做一個Login視窗的DemoSimpleLogin
  • #20: 介紹現成做一個Login視窗的DemoSimpleLogin
  • #34: 介紹現成做一個Login視窗的DemoSimpleLogin
  • #39: 介紹現成做一個Login視窗的DemoSimpleLogin