社区编辑申请
注册/登录
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:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5.  
  6. namespace MVCDemo.Models.Entities  
  7. {  
  8.     ///   
  9.     /// 分类实体类  
  10.     /// 
  11.  
  12.     public class CategoryInfo  
  13.     {  
  14.         public int ID { getset; }  
  15.         public string Name { getset; }  
  16.     }  
  17. }  
  18.  

AnnounceInfo.cs:

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

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

ICategoryService.cs:

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

IAnnounceService.cs

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

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

MockCategoryService.cs:

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

MockAnnounceService.cs

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

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

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

ServiceBuilder.cs:

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

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-11-12 09:18:40

ASP.NET MVC

2009-07-24 11:25:53

2015-03-03 10:23:22

2009-01-12 11:16:58

控制器控制器行为行为结果

2009-11-02 09:14:51

ASP.NET MVC

2009-07-20 12:59:53

ASP.NET MVCASP.NET框架的功

2009-06-12 09:24:34

ASP.NET窗体ASP.NET MVC

2011-08-08 10:46:15

ASP.NET MVC

2009-07-20 10:33:02

ASP.NET MVC

2009-07-31 12:43:59

ASP.NET MVC

2009-08-24 09:18:34

2010-01-26 13:15:42

ASP.NET MVC

2011-09-22 10:58:56

2009-07-22 10:09:59

ASP.NET MVC

2011-04-15 09:20:56

ASP.NET MVC

2009-12-08 08:57:21

ASP.NET MVC

2009-08-14 17:57:43

ASP.NET MVC

2010-06-23 15:44:03

ASP.NET MVC

2009-07-24 11:33:12

MVC单元测试ASP.NET

2009-07-22 13:24:24

同话题下的热门内容

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!Python轻量级Web框架:Bottle库!Python居然被用来开发游戏了?盘点你想不到的Python开发场景用了那么久的Lombok,你知道它的原理么?实战 | 如何用 Python 自动化监控文件夹完成服务部署!Fury:一个基于JIT动态编译的高性能多语言原生序列化框架细思恐极,插上U盘就开始执行Python代码太全了!用Python操作MySQL的使用教程集锦!

编辑推荐

使用Kotlin做开发一个月后的感想面试官问你什么是消息队列?把这篇甩给他!五大自动化测试的Python框架图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)2018年最流行的十大编程语言,其中包括你用的语言吗?
我收藏的内容
点赞
收藏

51CTO技术栈公众号