Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 10.1 MVC模式简介

10.1 MVC模式简介

1. MVC模式概述

MVC(Model-View-Controller)是一种广泛使用的软件架构模式,它将应用程序分为三个核心组件:

  • Model(模型):负责数据和业务逻辑
  • View(视图):负责用户界面展示
  • Controller(控制器):处理用户输入并协调模型和视图
graph TD
    A[用户请求] --> B[Controller]
    B --> C[Model]
    C --> D[View]
    D --> E[用户响应]

2. ASP.NET Core中的MVC实现

在ASP.NET Core中,MVC模式通过以下方式实现:

2.1 模型(Model)

  • 代表应用程序的数据和业务规则
  • 通常包含POCO(Plain Old CLR Objects)类
  • 可以包含数据验证逻辑
public class Product
{
    public int Id { get; set; }
    
    [Required]
    [StringLength(100)]
    public string Name { get; set; }
    
    [Range(0, 999.99)]
    public decimal Price { get; set; }
}

2.2 视图(View)

  • 使用Razor语法(.cshtml文件)
  • 负责呈现用户界面
  • 支持布局(Layout)和部分视图(Partial View)
@model IEnumerable<Product>

<h2>Product List</h2>
<table>
    @foreach(var product in Model)
    {
        <tr>
            <td>@product.Name</td>
            <td>@product.Price.ToString("C")</td>
        </tr>
    }
</table>

2.3 控制器(Controller)

  • 处理HTTP请求
  • 返回IActionResult(视图、JSON、重定向等)
  • 遵循"约定优于配置"原则
public class ProductsController : Controller
{
    private readonly IProductRepository _repository;
    
    public ProductsController(IProductRepository repository)
    {
        _repository = repository;
    }
    
    public IActionResult Index()
    {
        var products = _repository.GetAll();
        return View(products);
    }
}

3. MVC请求生命周期

  1. 路由系统接收HTTP请求
  2. 根据路由规则匹配控制器和动作方法
  3. 执行控制器方法
  4. 控制器与模型交互
  5. 控制器选择并返回视图
  6. 视图引擎渲染视图
  7. 返回HTML响应给客户端

4. MVC的优势

优势说明
关注点分离各组件职责明确,便于维护
可测试性组件独立,便于单元测试
可扩展性可以灵活替换视图或控制器
并行开发团队可以同时开发不同组件

5. 在ASP.NET Core中配置MVC

在Startup.cs中配置MVC服务:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews(); // 添加MVC服务
    }
    
    public void Configure(IApplicationBuilder app)
    {
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

6. 现代MVC的变体

  1. MVVM(Model-View-ViewModel):常用于客户端框架
  2. Razor Pages:ASP.NET Core的简化MVC模型
  3. Blazor:使用WebAssembly的组件模型

7. 最佳实践

  1. 保持控制器精简("瘦控制器"原则)
  2. 将业务逻辑放在模型或服务层
  3. 使用强类型视图
  4. 合理使用视图组件和部分视图
  5. 遵循RESTful设计原则

8. 常见问题解答

Q:MVC适合所有类型的Web应用吗? A:虽然MVC非常通用,但对于简单的CRUD应用,Razor Pages可能是更简单的选择;对于高度交互的应用,可能需要结合前端框架。

Q:如何处理复杂的视图逻辑? A:可以使用视图组件(View Components)或将复杂逻辑移到视图模型(View Model)中。

Q:MVC与Web API有何区别? A:Web API是MVC的子集,专注于返回数据而非HTML视图,但两者可以共存于同一项目中。

Last Updated:: 5/3/25, 11:34 PM