ASP.NET——MVC编程
一、什么是MVC编程模式
ASP.NET支持三种不同的开发模式:
WebPages(Web页面)、WebForms(Web窗体)、MVC(Model-View-Controller 模型-视图-控制器)
MVC是ASP.NET三种编程模式中的一种,是一种使用MVC(Model-View-Controller 模型-视图-控制器)设计创建Web应用程序的模式。
二、MVC设计模式
MVC分层有助于管理复杂的应用程序,可以让开发者在一个时间内关注一个方面,例如,开发者可以在不依赖业务逻辑的情况下进行视图设计。同时让应用程序的测试更加容易。
同时也简化了分组开发。不同开发人员可同时对视图,控制器逻辑,业务逻辑进行开发。
2.1)Model (模型)
Model(模型)表示应用程序核心(比如数据库记录列表)
是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据
2.2)View(视图)
View(视图)显示数据(数据库记录)
是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的
2.3)Controller(控制器)
Controller(控制器)处理输入(写入数据库记录)
是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
2.4)三者之间的交互关系
2.4.1)用户通过视图进行操作,如点击按钮、输入文本等,这些操作会触发相应的事件,视图将这些事件传递给控制器
2.4.2)控制器接收到事件后,根据事件类型和业务逻辑,调用模型中的方法来处理数据
2.4.3)模型处理完数据后,将结果返回给控制器
2.4.4)控制器根据模型返回的结果,选择合适的视图来展示数据,并将数据传递给视图,视图将数据展示给客户
三、C#中MVC模式的简单示例
在ASP.NET MVC模式中,MVC模式的应用较为典型,以下是一个简单示例:
3.1) 模型
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public decimal Price { get; set; }
}
public class ProductRepository
{
private List<Product> products = new List<Product>
{
new Product { ProductId = 1, ProductName = "Product 1", Price = 10.99m },
new Product { ProductId = 2, ProductName = "Product 2", Price = 19.99m }
};
public List<Product> GetAllProducts()
{
return products;
}
}
3.2)视图
在Views文件夹下创建Product文件夹,再在该文件夹下创建Index.cshtml文件,代码如下
@model IEnumerable<MvcApp.Models.Product>
<h2>Product List</h2>
<ul>
@foreach (var product in Model)
{
<li>@product.ProductName - $@product.Price</li>
}
</ul>
3.3)控制器
public class ProductController : Controller
{
private ProductRepository productRepository;
public ProductController()
{
productRepository = new ProductRepository();
}
public ActionResult Index()
{
var products = productRepository.GetAllProducts();
return View(products);
}
}
// Product 类和 ProductRepository 类构成了模型部分,负责处理产品数据。ProductController 是控制器,用于处理用户请求并将数据传递给视图。Index.cshtml 是视图,用于展示产品列表数据。
四、MVC模式的优势与劣势
4.1 )MVC模式的优势
4.1.1 )分离关注点
使代码结构更清晰,各个部分的职责明确,易于维护和扩展。项目结构更加i清晰,易于理解和管理。在需要对某一功能进行修改和扩展时,开发人员可以快速定位到对应的模块进行操作,不会影响其他无关部分,大大的提高了代码的可维护性
4.1.2 )提高可测试性
模型和控制器可以独立进行单元测试,提高了代码的可测试性和质量。同时,在测试的过程中可以通过使用模拟对象来代替真实的依赖对象,比如在测试控制器时,可以模拟模拟对象的行为,一边更好的控制测试环境,确保测试的准确性和可重复性
4.1.3 )支持团队协作
不同的开发人员可以分别负责模型、视图和控制器的开发,提高开发效率,开发人员在各自的模块进行开发,减少了因代码修改而产生的冲突,在代码合并时,更容易解决可能出现的问题,保证项目的顺利进行
4.1.4 )增强可扩展性
当需要添加新的功能或修改业务逻辑时,只需要在相应的模块中进行修改,不会影响其他模块的功能,大大提高了代码的可维护性。同时,MVC 模式允许将不同的功能模块以插件的形式进行开发和集成,每个插件可以包含自己的模型、视图和控制器,方便地与主应用程序进行集成,实现功能的扩展和定制
4.2 )MVC模式的劣势
4.2.1)开发复杂性增加
对于初学者来说,要理解和掌握MVC模式需要一定的时间和学习成本,需要去了解他们之间的关系,以及C#中如何实现这种架构模式
4.2.2)配置和搭建复杂
在 C# 中使用 MVC 模式,尤其是在一些框架如ASP.NET MVC 中,需要进行一些配置和搭建工作,如路由配置、依赖注入配置等。这些配置工作可能会比较繁琐,对于不熟悉框架的开发人员来说,可能会出现配置错误,导致应用程序出现问题
4.2.3)数据传递复杂
在 MVC 架构中,数据需要在模型、控制器和视图之间进行传递,可能需要进行数据的转换和封装等操作,这也可能会对性能产生一定的影响。特别是当传递大量数据或复杂对象时,性能问题可能会更加明显
4.2.4)会造成额外的开销
MVC 模式中的模型、视图和控制器之间的交互可能会带来一些额外的性能开销。例如,控制器调用模型方法、传递数据给视图等操作都需要一定的时间和资源,在一些对性能要求极高的场景下,可能会影响应用程序的整体性能
4.2.5)视图和控制器的紧耦性
些 C# 的 MVC 框架中,视图和控制器之间可能存在一定的紧耦合关系。视图可能需要依赖于特定的控制器方法或属性来获取数据,或者控制器需要了解视图的具体实现细节来进行数据传递和操作,这可能会导致在视图或控制器进行修改时,需要同时修改另一方,违反了松耦合的设计原则,使得视图中的一些逻辑可能难以在其他项目或模块中进行复用,降低了代码的复用性
五、ASP.NET MVC框架开发示例
使用C#中的ASP.NET MVC框架开发Web应用程序的示例
5.1 )创建项目
首先,创建一个新的ASP.NET MVC项目,在VS中,选择 “创建新项目”,然后选择 “ASP.NET Web 应用程序”,并选择 “MVC” 模板
5.2 )模型(Model)
在Models文件夹中创建一个TaskModel类,用于表示任务对象,包含任务的基本信息和相关操作
using System.Collections.Generic;
namespace MvcTaskManager.Models
{
public class TaskModel
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsCompleted { get; set; }
// 模拟数据存储
private static List<TaskModel> tasks = new List<TaskModel>();
// 创建任务
public static void CreateTask(TaskModel task)
{
tasks.Add(task);
}
// 获取所有任务
public static List<TaskModel> GetAllTasks()
{
return tasks;
}
// 删除任务
public static void DeleteTask(int id)
{
tasks.RemoveAll(t => t.Id == id);
}
}
}
5.3 )控制器(Controller)
在Controllers文件夹中创建一个TaskController类,用于处理用户请求并调用相应的模型方法
using System.Web.Mvc;
using MvcTaskManager.Models;
namespace MvcTaskManager.Controllers
{
public class TaskController : Controller
{
// 显示任务列表
public ActionResult Index()
{
var tasks = TaskModel.GetAllTasks();
return View(tasks);
}
// 显示创建任务的页面
public ActionResult Create()
{
return View();
}
// 处理创建任务的请求
[HttpPost]
public ActionResult Create(TaskModel task)
{
if (ModelState.IsValid)
{
TaskModel.CreateTask(task);
return RedirectToAction("Index");
}
return View(task);
}
// 处理删除任务的请求
public ActionResult Delete(int id)
{
TaskModel.DeleteTask(id);
return RedirectToAction("Index");
}
}
}
5.4 )视图(View)
在View/Task文件夹中创建以下视图
5.4.1 )Index.cshtml(任务列表视图)
@model IEnumerable<MvcTaskManager.Models.TaskModel>
@{
ViewBag.Title = "任务列表";
}
<h2>任务列表</h2>
<ul>
@foreach (var task in Model)
{
<li>
@task.Name - @(task.IsCompleted? "已完成" : "未完成")
@Html.ActionLink("删除", "Delete", new { id = task.Id })
</li>
}
</ul>
@Html.ActionLink("创建新任务", "Create")
5.4.2 )Create.cshtml(创建任务视图)
@model MvcTaskManager.Models.TaskModel
@{
ViewBag.Title = "创建任务";
}
<h2>创建任务</h2>
@using (Html.BeginForm("Create", "Task", FormMethod.Post))
{
<div>
<label for="Name">任务名称:</label>
@Html.TextBoxFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div>
<input type="submit" value="创建" />
</div>
}
5.5 )路由配置
在RouteConfig.cs文件中配置路由,确保请求能够正确路由到相应的控制器和操作
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcTaskManager
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Task", action = "Index", id = UrlParameter.Optional }
);
}
}
}
5.6 )启动应用程序
运行应用程序,可以看到以下功能
5.6.1)访问/Task/Index会显示任务列表
5.6.2)点击“创建新任务”会进入创建任务界面
5.6.3)在创建任务页面输入任务名称并提交会创建一个新任务,并返回到任务列表页面
5.6.4)任务列表页面中,每个任务后面有一个“删除”链接,点击删除该任务
5.7 )注意事项
5.7.1)这是一个简单的示例,实际应用中,需要更加复杂的业务逻辑和数据存储,如使用数据库存储任务数据
5.7.2)可以Entity Framework使用等ORM工具与数据库进行交互,将TaskModel映射到数据库
5.7.3)可以添加更多的验证逻辑,例如在TaskModel中添加属性验证,在Create方法中检查用户输入的合法性
通过这个示例,你可以看到如何使用 C# 的 MVC 模式开发一个简单的 Web 应用程序,将业务逻辑、用户界面和请求处理清晰地分离,提高开发效率和代码的可维护性。根据需要,可以进一步扩展和优化该示例,添加更多的功能和页面。
原文地址:https://blog.csdn.net/2401_84642440/article/details/145257501
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!