ASP.NET MVC教程(一):准备工作

开发 后端
本系列文章作为一个asp.net.mvc教程的入门学习,将不会长篇大论介绍其中的概念及理论,而是通过案例实践来学习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;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
 
namespace MVCDemo.Models.Entities  
{  
    ///   
  •     /// 分类实体类  
  •     /// 
  •       public class CategoryInfo       {           public int ID { getset; }           public string Name { getset; }       }   }    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.

    AnnounceInfo.cs:

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
     
    namespace MVCDemo.Models.Entities  
    {  
        ///   
  •     /// 公告实体类  
  •     /// 
  •       public class AnnounceInfo       {           public int ID { getset; }           public string Title { getset; }           public string Content { getset; }           public int Category { getset; }       }   }    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.
    • 20.
    • 21.

    接下来,我们将定义两个接口,分别是公告类别服务和公告服务必须实现的接口。这两个接口放在Interfaces下。

    ICategoryService.cs:

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
    using MVCDemo.Models.Entities;  
     
    namespace MVCDemo.Models.Interfaces  
    {  
        ///   
  •     /// 分类服务组件接口  
  •     /// 
  •       public interface ICategoryService       {           ///   
  •         /// 添加分类  
  •         /// 
  •           ///            void Add(CategoryInfo category);             ///   
  •         /// 修改分类名称  
  •         /// 
  •           ///            ///            void ChangeName(int id,string name);             ///   
  •         /// 删除分类  
  •         /// 
  •           ///            void Remove(int id);             ///   
  •         /// 取得某个分类详细信息  
  •         /// 
  •           ///            ///            CategoryInfo GetDetail(int id);             ///   
  •         /// 取得所有分类  
  •         /// 
  •           ///            List GetAll();       }   }    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.
    • 20.
    • 21.
    • 22.
    • 23.
    • 24.
    • 25.
    • 26.
    • 27.
    • 28.
    • 29.
    • 30.
    • 31.
    • 32.
    • 33.
    • 34.
    • 35.
    • 36.
    • 37.
    • 38.
    • 39.
    • 40.
    • 41.
    • 42.
    • 43.
    • 44.
    • 45.
    • 46.
    • 47.
    • 48.
    • 49.
    • 50.
    • 51.
    • 52.
    • 53.
    • 54.
    • 55.
    • 56.
    • 57.
    • 58.
    • 59.

    IAnnounceService.cs

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
    using MVCDemo.Models.Entities;  
     
    namespace MVCDemo.Models.Interfaces  
    {  
        ///   
  •     /// 公告服务组件接口  
  •     /// 
  •       public interface IAnnounceService       {           ///   
  •         /// 发布公告  
  •         /// 
  •           ///            void Release(AnnounceInfo announce);             ///   
  •         /// 修改公告信息  
  •         /// 
  •           ///            void Notify(AnnounceInfo announce);             ///   
  •         /// 删除公告  
  •         /// 
  •           ///            void Remove(int id);             ///   
  •         /// 取得公告详细内容  
  •         /// 
  •           ///            ///            AnnounceInfo GetDetail(int id);             ///   
  •         /// 取得某个分类下的所有公告  
  •         /// 
  •           ///            ///            List GetByCategory(CategoryInfo category);       }   }    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.
    • 20.
    • 21.
    • 22.
    • 23.
    • 24.
    • 25.
    • 26.
    • 27.
    • 28.
    • 29.
    • 30.
    • 31.
    • 32.
    • 33.
    • 34.
    • 35.
    • 36.
    • 37.
    • 38.
    • 39.
    • 40.
    • 41.
    • 42.
    • 43.
    • 44.
    • 45.
    • 46.
    • 47.
    • 48.
    • 49.
    • 50.
    • 51.
    • 52.
    • 53.
    • 54.
    • 55.
    • 56.
    • 57.
    • 58.
    • 59.

    然后,我们在MockModels下建立两个Mock业务逻辑服务模型。注意它们要各自实现自己的接口。

    MockCategoryService.cs:

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
    using MVCDemo.Models.Interfaces;  
    using MVCDemo.Models.Entities;  
     
    namespace MVCDemo.Models.MockModels  
    {  
        ///   
  •     /// “欺骗”服务组件,用于模拟分类的业务服务  
  •     /// 
  •       public class MockCategoryService : ICategoryService       {           ///   
  •         /// 添加分类  
  •         /// 
  •           ///            public void Add(CategoryInfo category)           {               return;           }             ///   
  •         /// 修改分类名称  
  •         /// 
  •           ///            ///            public void ChangeName(int id, string name)           {               return;           }             ///   
  •         /// 删除分类  
  •         /// 
  •           ///            public void Remove(int id)           {               return;           }             ///   
  •         /// 取得某个分类详细信息  
  •         /// 
  •           ///            ///            public CategoryInfo GetDetail(int id)           {               return new CategoryInfo               {                   ID = id,                   Name = "***通告",               };           }             ///   
  •         /// 取得所有分类  
  •         /// 
  •           ///            public List GetAll()           {               List categories = new List();               for (int i = 1; i <= 5; i++)               {                   CategoryInfo category = new CategoryInfo                   {                       ID = i,                       Name="通告类别"+i,                   };                     categories.Add(category);               }                 return categories;           }       }   }    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.
    • 20.
    • 21.
    • 22.
    • 23.
    • 24.
    • 25.
    • 26.
    • 27.
    • 28.
    • 29.
    • 30.
    • 31.
    • 32.
    • 33.
    • 34.
    • 35.
    • 36.
    • 37.
    • 38.
    • 39.
    • 40.
    • 41.
    • 42.
    • 43.
    • 44.
    • 45.
    • 46.
    • 47.
    • 48.
    • 49.
    • 50.
    • 51.
    • 52.
    • 53.
    • 54.
    • 55.
    • 56.
    • 57.
    • 58.
    • 59.
    • 60.
    • 61.
    • 62.
    • 63.
    • 64.
    • 65.
    • 66.
    • 67.
    • 68.
    • 69.
    • 70.
    • 71.
    • 72.
    • 73.
    • 74.
    • 75.
    • 76.
    • 77.
    • 78.
    • 79.
    • 80.
    • 81.
    • 82.
    • 83.
    • 84.
    • 85.
    • 86.
    • 87.
    • 88.
    • 89.
    • 90.
    • 91.

    MockAnnounceService.cs

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
    using MVCDemo.Models.Interfaces;  
    using MVCDemo.Models.Entities;  
     
    namespace MVCDemo.Models.MockModels  
    {  
        ///   
  •     /// “欺骗”服务组件,用于模拟公告的业务服务  
  •     /// 
  •       public class MockAnnounceService : IAnnounceService       {           ///   
  •         /// 发布公告  
  •         /// 
  •           ///            public void Release(AnnounceInfo announce)           {               throw new Exception("发布公告失败了!原因?没有原因!我是业务组件,我说失败就失败!");               return;           }             ///   
  •         /// 修改公告信息  
  •         /// 
  •           ///            public void Notify(AnnounceInfo announce)           {               return;           }             ///   
  •         /// 删除公告  
  •         /// 
  •           ///            public void Remove(int id)           {               return;           }             ///   
  •         /// 取得公告详细内容  
  •         /// 
  •           ///            ///            public AnnounceInfo GetDetail(int id)           {               return new AnnounceInfo               {                   ID = id,                   Title = "第" + id + "则公告",                   Content = "全体同学明早九点集体做俯卧撑!",               };           }             ///   
  •         /// 取得某个分类下的所有公告  
  •         /// 
  •           ///            ///            public List GetByCategory(CategoryInfo category)           {               List announces = new List();               for (int i = 1; i <= 10; i++)               {                   AnnounceInfo announce = new AnnounceInfo                   {                       ID = i,                       Title = category.Name+ "的第" + i + "则公告",                       Content = "全体同学明早九点集体做俯卧撑!",                   };                     announces.Add(announce);               }                 return announces;           }       }   }    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.
    • 20.
    • 21.
    • 22.
    • 23.
    • 24.
    • 25.
    • 26.
    • 27.
    • 28.
    • 29.
    • 30.
    • 31.
    • 32.
    • 33.
    • 34.
    • 35.
    • 36.
    • 37.
    • 38.
    • 39.
    • 40.
    • 41.
    • 42.
    • 43.
    • 44.
    • 45.
    • 46.
    • 47.
    • 48.
    • 49.
    • 50.
    • 51.
    • 52.
    • 53.
    • 54.
    • 55.
    • 56.
    • 57.
    • 58.
    • 59.
    • 60.
    • 61.
    • 62.
    • 63.
    • 64.
    • 65.
    • 66.
    • 67.
    • 68.
    • 69.
    • 70.
    • 71.
    • 72.
    • 73.
    • 74.
    • 75.
    • 76.
    • 77.
    • 78.
    • 79.
    • 80.
    • 81.
    • 82.
    • 83.
    • 84.
    • 85.
    • 86.
    • 87.
    • 88.
    • 89.
    • 90.
    • 91.
    • 92.
    • 93.
    • 94.

    可以看到,这两个类并没有访问数据库,也没有实现真正的业务逻辑,而不过是“捏造”了一些数据骗骗我们的表示层而已。

    ***,我们要建立一个生成业务逻辑模型的生成器,用来实现表示层和业务逻辑层的解耦。当然,为了简化复杂度,这里没有使用依赖注入机制。下面是我们生成器的代码,这个类是直接放在Models下的。

    ServiceBuilder.cs:

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
    using MVCDemo.Models.Interfaces;  
    using MVCDemo.Models.MockModels;  
     
    namespace MVCDemo.Models  
    {  
        ///   
  •     /// 服务组件生成类,用于生成业务服务组件  
  •     /// 
  •       public sealed class ServiceBuilder       {           ///   
  •         /// 创建分类服务组件  
  •         /// 
  •           /// 分类服务组件           public static ICategoryService BuildCategoryService()           {               return new MockCategoryService();           }             ///   
  •         /// 创建公告服务组件  
  •         /// 
  •           /// 公告服务组件           public static IAnnounceService BuildAnnounceService()           {               return new MockAnnounceService();           }       }   }    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.
    • 20.
    • 21.
    • 22.
    • 23.
    • 24.
    • 25.
    • 26.
    • 27.
    • 28.
    • 29.
    • 30.
    • 31.
    • 32.
    • 33.
    • 34.
    • 35.
    • 36.
    • 37.
    • 38.
    • 39.
    • 40.

    OK,到这里,我们的准备工作就做完了。完成这些后,系统的目录结构如下图所示:

    系统的目录结构 

    在这篇文章中,我们只是讲了一下这个系列文章要做什么,以及为案例做了一些准备工作。从下篇开始,我们将继续通过asp.net.mvc教程(二)介绍如何正式开始使用asp.net.mvc完成这个案例。

    【编辑推荐】

    1. 浅谈ASP.NET MVC框架
    2. 介绍ASP.NET MVC中的MvcAjaxPanel
    3. ASP.NET MVC框架拯救UpdatePanel
    4. 用ASP.NET MVC源代码寻找解决方案
    5. ASP.NET MVC框架的ActionInvoker
    责任编辑:book05 来源: cnblogs
    相关推荐

    2009-07-24 13:20:44

    MVC框架ASP.NET

    2009-07-31 12:43:59

    ASP.NET MVC

    2009-07-22 17:45:35

    ASP.NET教程

    2009-07-22 13:24:24

    ASP.NET MVC

    2009-07-23 15:44:39

    ASP.NET MVC

    2009-07-23 14:31:20

    ASP.NET MVC

    2009-07-22 10:09:59

    ASP.NET MVC

    2009-07-20 10:53:59

    ASP.NET MVC

    2009-07-27 12:22:03

    ASP.NET和ASPASP.NET入门教程

    2010-06-23 15:44:03

    ASP.NET MVC

    2010-03-19 09:17:16

    ASP.NET MVC

    2009-07-24 11:33:12

    MVC单元测试ASP.NET

    2009-07-22 10:34:37

    ActionInvokASP.NET MVC

    2009-07-22 13:08:55

    拯救UpdatePanASP.NET MVC

    2011-04-15 09:20:56

    ASP.NET MVC

    2009-06-12 09:24:34

    ASP.NET窗体ASP.NET MVC

    2009-07-22 10:13:31

    异步ActionASP.NET MVC

    2009-07-20 15:44:32

    ASP.NET MVC

    2009-07-29 09:17:12

    jQuery删除

    2009-07-23 11:33:18

    点赞
    收藏

    51CTO技术栈公众号