ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作
摘要
????? 本文將簡要介紹這個文章系列的目的、形式及大體內容。并且完成開始學習這個系列前所必要的準備工作。
前言
????? ASP.NET MVC作為微軟官方的MVC解決方案,推出有一段時間了??梢哉f自動推出以來,一直廣受關注。在經歷了漫長的Preview之后,前幾天終于推出了其beta版。并且在官方文檔中,微軟聲明最終的正式版與beta版相比不會有大的變化。所以,對于.NET平臺的開發人員來說,是時候學習ASP.NET MVC了。
??????本系列文章作為一個ASP.NET MVC的入門教程,將不會長篇大論介紹其中的概念及理論。而是通過案例實踐來學習ASP.NET MVC。在這系列文章中我將逐步完成一個“公告發布系統”。我的寫作策略是:先動手做,遇到需要解釋概念和理論的時候再解釋,而不是先把概念和理論解釋完再做東西。
????? 另外,我還有幾點要說明的:
????? 1.為了將大家的關注點充分集中在ASP.NET MVC上,這個Demo的業務處理將使用Mock的方式。即不會真正去訪問數據庫,而是虛擬一些數據。
????? 2.本Demo將不考慮任何美工問題。
????? 下面,讓我們一起開始ASP.NET MVC之旅吧。在這一篇中,我們將做完所有的準備工作。
配置環境
????? 如果您還沒有安裝ASP.NET MVC的話,請到這里下載安裝。
????? 下載后,按提示安裝就可以了。
新建項目
????? 安裝完ASP.NET MVC后,在VS里新建一個項目,可以看到有一個“ASP.NET MVC Web Application”的選項,選擇它,新建一個項目,并命名為“MVCDemo”。
????? 建完項目后,可以看到默認情況下已經建立了很多文件夾,這里簡略說一下各個文件夾的作用。
????? Content——存放應用需要的一些資源文件,如圖片、CSS等。
????? Controllers——存放控制器類。
????? Models——存放業務模型組件。
????? Scripts——存放JavaScript腳本文件。
????? Views——存放視圖。
????? 現在不了解一些概念沒關系,后續文章將慢慢解釋。
準備工作
????? 新建完項目后,我們要做的準備工作就是建立Mock業務模型,這樣以后我們就直接使用這些“欺騙”式的業務模型進行業務處理,而將全部關注點放在ASP.NET MVC的學習上。
????? 首先在Models下新建三個文件夾,分別叫做Entities、Interfaces、MockModels,分別用來存放實體類、接口及Mock業務模型。
????? Entities下有兩個類:CategoryInfo和AnnounceInfo,分別是公告類別和公告的實體類。具體代碼如下:
CategoryInfo.cs:
using?System.Collections.Generic;
using?System.Linq;
using?System.Web;
namespace?MVCDemo.Models.Entities
{
????///?<summary>
????///?分類實體類
????///?</summary>
????public?class?CategoryInfo
????{
????????public?int?ID?{?get;?set;?}
????????public?string?Name?{?get;?set;?}
????}
}
AnnounceInfo.cs:
using?System.Collections.Generic;
using?System.Linq;
using?System.Web;
namespace?MVCDemo.Models.Entities
{
????///?<summary>
????///?公告實體類
????///?</summary>
????public?class?AnnounceInfo
????{
????????public?int?ID?{?get;?set;?}
????????public?string?Title?{?get;?set;?}
????????public?string?Content?{?get;?set;?}
????????public?int?Category?{?get;?set;?}
????}
}
????? 接下來,我們將定義兩個接口,分別是公告類別服務和公告服務必須實現的接口。這兩個接口放在Interfaces下。
ICategoryService.cs:
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?MVCDemo.Models.Entities;
namespace?MVCDemo.Models.Interfaces
{
????///?<summary>
????///?分類服務組件接口
????///?</summary>
????public?interface?ICategoryService
????{
????????///?<summary>
????????///?添加分類
????????///?</summary>
????????///?<param?name="category"></param>
????????void?Add(CategoryInfo?category);
????????///?<summary>
????????///?修改分類名稱
????????///?</summary>
????????///?<param?name="id"></param>
????????///?<param?name="name"></param>
????????void?ChangeName(int?id,string?name);
????????///?<summary>
????????///?刪除分類
????????///?</summary>
????????///?<param?name="id"></param>
????????void?Remove(int?id);
????????///?<summary>
????????///?取得某個分類詳細信息
????????///?</summary>
????????///?<param?name="id"></param>
????????///?<returns></returns>
????????CategoryInfo?GetDetail(int?id);
????????///?<summary>
????????///?取得所有分類
????????///?</summary>
????????///?<returns></returns>
????????List<CategoryInfo>?GetAll();
????}
}
IAnnounceService.cs
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?MVCDemo.Models.Entities;
namespace?MVCDemo.Models.Interfaces
{
????///?<summary>
????///?公告服務組件接口
????///?</summary>
????public?interface?IAnnounceService
????{
????????///?<summary>
????????///?發布公告
????????///?</summary>
????????///?<param?name="announce"></param>
????????void?Release(AnnounceInfo?announce);
????????///?<summary>
????????///?修改公告信息
????????///?</summary>
????????///?<param?name="announce"></param>
????????void?Notify(AnnounceInfo?announce);
????????///?<summary>
????????///?刪除公告
????????///?</summary>
????????///?<param?name="id"></param>
????????void?Remove(int?id);
????????///?<summary>
????????///?取得公告詳細內容
????????///?</summary>
????????///?<param?name="id"></param>
????????///?<returns></returns>
????????AnnounceInfo?GetDetail(int?id);
????????///?<summary>
????????///?取得某個分類下的所有公告
????????///?</summary>
????????///?<param?name="categoryId"></param>
????????///?<returns></returns>
????????List<AnnounceInfo>?GetByCategory(CategoryInfo?category);
????}
}
然后,我們在MockModels下建立兩個Mock業務邏輯服務模型。注意它們要各自實現自己的接口。
MockCategoryService.cs:
using?System.Collections.Generic;
using?System.Linq;
using?System.Web;
using?MVCDemo.Models.Interfaces;
using?MVCDemo.Models.Entities;
namespace?MVCDemo.Models.MockModels
{
????///?<summary>
????///?“欺騙”服務組件,用于模擬分類的業務服務
????///?</summary>
????public?class?MockCategoryService?:?ICategoryService
????{
????????///?<summary>
????????///?添加分類
????????///?</summary>
????????///?<param?name="category"></param>
????????public?void?Add(CategoryInfo?category)
????????{
????????????return;
????????}
????????///?<summary>
????????///?修改分類名稱
????????///?</summary>
????????///?<param?name="id"></param>
????????///?<param?name="name"></param>
????????public?void?ChangeName(int?id,?string?name)
????????{
????????????return;
????????}
????????///?<summary>
????????///?刪除分類
????????///?</summary>
????????///?<param?name="id"></param>
????????public?void?Remove(int?id)
????????{
????????????return;
????????}
????????///?<summary>
????????///?取得某個分類詳細信息
????????///?</summary>
????????///?<param?name="id"></param>
????????///?<returns></returns>
????????public?CategoryInfo?GetDetail(int?id)
????????{
????????????return?new?CategoryInfo
????????????{
????????????????ID?=?id,
????????????????Name?=?"最新通告",
????????????};
????????}
????????///?<summary>
????????///?取得所有分類
????????///?</summary>
????????///?<returns></returns>
????????public?List<CategoryInfo>?GetAll()
????????{
????????????List<CategoryInfo>?categories?=?new?List<CategoryInfo>();
????????????for?(int?i?=?1;?i?<=?5;?i++)
????????????{
????????????????CategoryInfo?category?=?new?CategoryInfo
????????????????{
????????????????????ID?=?i,
????????????????????Name="通告類別"+i,
????????????????};
????????????????categories.Add(category);
????????????}
????????????return?categories;
????????}
????}
}
MockAnnounceService.cs
using?System.Collections.Generic;
using?System.Linq;
using?System.Web;
using?MVCDemo.Models.Interfaces;
using?MVCDemo.Models.Entities;
namespace?MVCDemo.Models.MockModels
{
????///?<summary>
????///?“欺騙”服務組件,用于模擬公告的業務服務
????///?</summary>
????public?class?MockAnnounceService?:?IAnnounceService
????{
????????///?<summary>
????????///?發布公告
????????///?</summary>
????????///?<param?name="announce"></param>
????????public?void?Release(AnnounceInfo?announce)
????????{
????????????throw?new?Exception("發布公告失敗了!原因?沒有原因!我是業務組件,我說失敗就失敗!");
????????????return;
????????}
????????///?<summary>
????????///?修改公告信息
????????///?</summary>
????????///?<param?name="announce"></param>
????????public?void?Notify(AnnounceInfo?announce)
????????{
????????????return;
????????}
????????///?<summary>
????????///?刪除公告
????????///?</summary>
????????///?<param?name="id"></param>
????????public?void?Remove(int?id)
????????{
????????????return;
????????}
????????///?<summary>
????????///?取得公告詳細內容
????????///?</summary>
????????///?<param?name="id"></param>
????????///?<returns></returns>
????????public?AnnounceInfo?GetDetail(int?id)
????????{
????????????return?new?AnnounceInfo
????????????{
????????????????ID?=?id,
????????????????Title?=?"第"?+?id?+?"則公告",
????????????????Content?=?"全體同學明早九點集體做俯臥撐!",
????????????};
????????}
????????///?<summary>
????????///?取得某個分類下的所有公告
????????///?</summary>
????????///?<param?name="categoryId"></param>
????????///?<returns></returns>
????????public?List<AnnounceInfo>?GetByCategory(CategoryInfo?category)
????????{
????????????List<AnnounceInfo>?announces?=?new?List<AnnounceInfo>();
????????????for?(int?i?=?1;?i?<=?10;?i++)
????????????{
????????????????AnnounceInfo?announce?=?new?AnnounceInfo
????????????????{
????????????????????ID?=?i,
????????????????????Title?=?category.Name+?"的第"?+?i?+?"則公告",
????????????????????Content?=?"全體同學明早九點集體做俯臥撐!",
????????????????};
????????????????announces.Add(announce);
????????????}
????????????return?announces;
????????}
????}
}
????? 可以看到,這兩個類并沒有訪問數據庫,也沒有實現真正的業務邏輯,而不過是“捏造”了一些數據騙騙我們的表示層而已。
????? 最后,我們要建立一個生成業務邏輯模型的生成器,用來實現表示層和業務邏輯層的解耦。當然,為了簡化復雜度,這里沒有使用依賴注入機制。下面是我們生成器的代碼,這個類是直接放在Models下的。
ServiceBuilder.cs:
using?System.Collections.Generic;
using?System.Linq;
using?System.Web;
using?MVCDemo.Models.Interfaces;
using?MVCDemo.Models.MockModels;
namespace?MVCDemo.Models
{
????///?<summary>
????///?服務組件生成類,用于生成業務服務組件
????///?</summary>
????public?sealed?class?ServiceBuilder
????{
????????///?<summary>
????????///?創建分類服務組件
????????///?</summary>
????????///?<returns>分類服務組件</returns>
????????public?static?ICategoryService?BuildCategoryService()
????????{
????????????return?new?MockCategoryService();
????????}
????????///?<summary>
????????///?創建公告服務組件
????????///?</summary>
????????///?<returns>公告服務組件</returns>
????????public?static?IAnnounceService?BuildAnnounceService()
????????{
????????????return?new?MockAnnounceService();
????????}
????}
}
????? OK,到這里,我們的準備工作就做完了。完成這些后,系統的目錄結構如下圖所示:
????? 在這篇文章中,我們只是講了一下這個系列文章要做什么,以及為案例做了一些準備工作。從下篇開始,我們將正式開始使用ASP.NET MVC完成這個案例。
from:?http://www.cnblogs.com/leoo2sk/archive/2008/10/27/1320285.html
總結
以上是生活随笔為你收集整理的ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分类模型的性能评估——以SAS Logi
- 下一篇: ASP.NET MVC案例教程(基于AS