From a0364058b342cf8d3eef7081226fdc2d8007d02f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=86=B0?= <3355703905@qq.com> Date: Mon, 5 Jan 2026 01:10:30 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E5=BE=90=E5=86=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 徐冰 <3355703905@qq.com> --- ...00\345\217\221\347\216\257\345\242\203.md" | 37 +++++++++++++++++ ...vc\346\216\247\345\210\266\345\231\250.md" | 41 +++++++++++++++++++ ...50\347\232\204\350\267\257\347\224\261.md" | 15 +++++++ 3 files changed, 93 insertions(+) create mode 100644 "\345\276\220\345\206\260/20251229-mvc\345\274\200\345\217\221\347\216\257\345\242\203.md" create mode 100644 "\345\276\220\345\206\260/20251231-mvc\346\216\247\345\210\266\345\231\250.md" create mode 100644 "\345\276\220\345\206\260/20260103-mvc\346\216\247\345\210\266\345\231\250\347\232\204\350\267\257\347\224\261.md" diff --git "a/\345\276\220\345\206\260/20251229-mvc\345\274\200\345\217\221\347\216\257\345\242\203.md" "b/\345\276\220\345\206\260/20251229-mvc\345\274\200\345\217\221\347\216\257\345\242\203.md" new file mode 100644 index 0000000..012d0c2 --- /dev/null +++ "b/\345\276\220\345\206\260/20251229-mvc\345\274\200\345\217\221\347\216\257\345\242\203.md" @@ -0,0 +1,37 @@ +## 笔记 + +### 搭建一个开发环境 + +``` +理解ASP.NET Core MVC的基本概念和架构 +成功搭建VSCode开发环境并创建第一个MVC项目 +了解MVC项目的基本结构,能够使用命令行和VSCode运行项目 + +首先安装必要的软件和依赖: +``` + +### 如何使用命令建立一个mvc文件 +``` + +使用命令行创建MVC项目 +3.1 为什么使用命令行? +更灵活:可以在任何目录创建项目 +更透明:了解项目创建的每一个步骤 +技能通用:命令行技能在其他开发中也会用到 +3.2 创建项目步骤 +步骤1:打开终端 + +Windows: 按Win+R,输入cmd或使用PowerShell +Mac/Linux: 打开Terminal +步骤2:创建项目目录并进入 + +mkdir StudentManagementSystem +cd StudentManagementSystem +步骤3:创建MVC项目 + +dotnet new mvc -n StudentManagementSystem +步骤4:用VSCode打开项目 + +code . +3.3 项目结构解析 +项目创建成功后,在VSCode中查看项目结构 \ No newline at end of file diff --git "a/\345\276\220\345\206\260/20251231-mvc\346\216\247\345\210\266\345\231\250.md" "b/\345\276\220\345\206\260/20251231-mvc\346\216\247\345\210\266\345\231\250.md" new file mode 100644 index 0000000..ac45147 --- /dev/null +++ "b/\345\276\220\345\206\260/20251231-mvc\346\216\247\345\210\266\345\231\250.md" @@ -0,0 +1,41 @@ +## 笔记 + +接收请求:捕获用户的 HTTP 请求(如 GET/POST、参数、Cookie 等) +分发逻辑:调用对应的 Model 层处理数据(查 / 增 / 删 / 改) +返回响应:将处理结果传递给 View 层渲染,或直接返回 JSON / 重定向 +### 控制器规范 +``` +控制器的命名规范 +名称必须以 Controller 结尾(如 StudentController) +通常放在 Controllers 文件夹中 +继承 Microsoft.AspNetCore.Mvc.Controller 类 +// 正确的命名 +public class StudentController : Controller + +// 错误的命名(不会自动识别为控制器) +public class StudentManager : Controller +1.3 控制器的生命周期 +HTTP请求 → 路由系统 → 找到对应控制器 → 创建控制器实例 → +调用动作方法 → 返回结果 → 销毁控制器实例 +``` +### 如何创建控制器 +``` + 什么是动作方法(Action Method)? +控制器中的公共方法(public method) +通常返回 IActionResult 或其派生类型 +每个动作方法对应一个用户可访问的URL +public class StudentController : Controller +{ + // 动作方法:显示学生列表 + public IActionResult Index() + { + return View(); // 返回视图 + } + + // 动作方法:显示学生详情 + public IActionResult Details(int id) + { + // 处理逻辑 + return View(); + } +} \ No newline at end of file diff --git "a/\345\276\220\345\206\260/20260103-mvc\346\216\247\345\210\266\345\231\250\347\232\204\350\267\257\347\224\261.md" "b/\345\276\220\345\206\260/20260103-mvc\346\216\247\345\210\266\345\231\250\347\232\204\350\267\257\347\224\261.md" new file mode 100644 index 0000000..36b76c0 --- /dev/null +++ "b/\345\276\220\345\206\260/20260103-mvc\346\216\247\345\210\266\345\231\250\347\232\204\350\267\257\347\224\261.md" @@ -0,0 +1,15 @@ +## 笔记 + + MVC 中,路由是控制器的 “地址簿”: +前端发起请求(如 http://localhost:5000/users) +框架(如 Flask)根据路由规则,匹配到对应的控制器方法(如 list_users) +控制器方法处理逻辑后返回响应 +``` +如何弄一个路由(在 Program.cs 中配置): +app.MapControllerRoute( + name: "default", + pattern: "{controller=Home}/{action=Index}/{id?}"); + 路由器模版解释: + {controller}:控制器名(去掉Controller后缀) + {action}:动作方法名 + {id?}:可选参数,? 表示可选 \ No newline at end of file -- Gitee From e1ead5c808a89b3c00882b5c7324d0efd6c4fb8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=86=B0?= <3355703905@qq.com> Date: Sun, 11 Jan 2026 08:51:44 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E5=BE=90=E5=86=B027?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 徐冰 <3355703905@qq.com> --- .../20260105-\345\207\272\345\205\245mvc.md" | 24 ++++++++++ ...7-\346\216\247\345\210\266\345\231\250.md" | 38 +++++++++++++++ .../20260108-\350\247\206\345\233\276.md" | 39 ++++++++++++++++ .../20260109-\346\250\241\345\236\213.md" | 46 +++++++++++++++++++ 4 files changed, 147 insertions(+) create mode 100644 "\345\276\220\345\206\260/20260105-\345\207\272\345\205\245mvc.md" create mode 100644 "\345\276\220\345\206\260/20260107-\346\216\247\345\210\266\345\231\250.md" create mode 100644 "\345\276\220\345\206\260/20260108-\350\247\206\345\233\276.md" create mode 100644 "\345\276\220\345\206\260/20260109-\346\250\241\345\236\213.md" diff --git "a/\345\276\220\345\206\260/20260105-\345\207\272\345\205\245mvc.md" "b/\345\276\220\345\206\260/20260105-\345\207\272\345\205\245mvc.md" new file mode 100644 index 0000000..c65093e --- /dev/null +++ "b/\345\276\220\345\206\260/20260105-\345\207\272\345\205\245mvc.md" @@ -0,0 +1,24 @@ +# 初入MVC + +## 笔记 + +MVC(Model-View-Controller)是一种软件架构模式,将应用分为三个核心组件: + +**Model(模型)**:负责数据和业务逻辑,直接管理数据、规则和操作。不涉及任何界面展示。 + +**View(视图)**:用户界面层,展示数据并接收用户输入。通常是被动的,不处理业务逻辑。 + +**Controller(控制器)**:协调层,接收用户输入,调用模型处理数据,更新视图显示结果。充当Model和View之间的桥梁。 + +**工作流程**: + +1. 用户通过View交互 +2. Controller接收请求 +3. Controller调用Model处理业务 +4. Model更新数据并返回结果 +5. Controller将结果传递给View +6. View更新界面展示 + +**优点**:分离关注点、代码复用性高、便于团队协作。 + +**初学要点**:明确各层职责边界,避免将业务逻辑写入视图,保持控制器精简,让模型处理核心逻辑。这种分层思想是现代Web框架(如Spring MVC、ASP.NET MVC)的基础。 diff --git "a/\345\276\220\345\206\260/20260107-\346\216\247\345\210\266\345\231\250.md" "b/\345\276\220\345\206\260/20260107-\346\216\247\345\210\266\345\231\250.md" new file mode 100644 index 0000000..4a108e0 --- /dev/null +++ "b/\345\276\220\345\206\260/20260107-\346\216\247\345\210\266\345\231\250.md" @@ -0,0 +1,38 @@ +# 控制器 + +## 笔记 + +**控制器是MVC的协调中心**,接收用户请求,协调模型和视图完成响应。 + +**核心职责:** + +1. **请求处理**:接收并验证用户输入 +2. **业务协调**:调用模型执行业务逻辑 +3. **数据传递**:将处理结果传递给视图 +4. **流程控制**:决定下一步显示哪个视图 + +**设计原则:** + +- 保持“瘦控制器”,业务逻辑应放在模型中 +- 单一职责,每个控制器方法专注一个功能 +- 避免直接在控制器中操作数据库 +- 将数据验证委托给模型或专门的验证器 + +**典型工作流:** +用户请求 → 路由解析 → 控制器方法 → 调用模型 → 返回结果 → 渲染视图 + +**示例(伪代码):** + +```java +public class UserController { + public ActionResult Login(LoginRequest request) { + var user = userModel.Validate(request); // 调用模型 + if(user != null) { + return View("Dashboard", user); // 传递数据到视图 + } + return View("LoginError"); + } +} +``` + +控制器是MVC的“交通警察”,应专注流程控制而非业务实现。 \ No newline at end of file diff --git "a/\345\276\220\345\206\260/20260108-\350\247\206\345\233\276.md" "b/\345\276\220\345\206\260/20260108-\350\247\206\345\233\276.md" new file mode 100644 index 0000000..cc10696 --- /dev/null +++ "b/\345\276\220\345\206\260/20260108-\350\247\206\345\233\276.md" @@ -0,0 +1,39 @@ +# 视图 + +## 笔记 + +**视图是MVC的展示层**,负责将数据呈现为用户界面,不包含业务逻辑。 + +**核心职责:** + +1. **数据展示**:将模型数据渲染为HTML/UI +2. **用户交互**:提供表单、按钮等交互元素 +3. **界面结构**:定义页面布局和视觉呈现 +4. **数据绑定**:动态显示模型状态变化 + +**设计原则:** + +- 保持“笨视图”,仅负责展示 +- 避免在视图中编写业务逻辑 +- 最小化视图中的代码逻辑 +- 使用模板语言分离结构和逻辑 + +**视图类型:** + +- **强类型视图**:绑定特定模型类型 +- **布局视图**:定义页面通用结构 +- **部分视图**:可重用的UI组件 +- **视图组件**:包含逻辑的独立UI单元 + +**示例(Razor视图):** + +```html +@model User +

欢迎,@Model.Name

+

上次登录:@Model.LastLogin

+ +``` + +视图应专注于“如何展示”,通过模板引擎实现数据与表现的分离,确保界面层的纯净和可维护性。 + +## 练习 \ No newline at end of file diff --git "a/\345\276\220\345\206\260/20260109-\346\250\241\345\236\213.md" "b/\345\276\220\345\206\260/20260109-\346\250\241\345\236\213.md" new file mode 100644 index 0000000..bfbefa8 --- /dev/null +++ "b/\345\276\220\345\206\260/20260109-\346\250\241\345\236\213.md" @@ -0,0 +1,46 @@ +# 模型 + +## 笔记 + +**模型是MVC的业务核心**,封装应用数据和业务规则,独立于用户界面。 + +**核心职责:** + +1. **数据管理**:定义数据结构、持久化操作 +2. **业务逻辑**:实现核心计算规则和业务流程 +3. **数据验证**:确保数据完整性和有效性 +4. **状态管理**:维护应用状态变更 + +**设计原则:** + +- 保持“胖模型”,集中存放业务逻辑 +- 独立于控制器和视图,可单独测试 +- 遵循单一职责,避免“上帝对象” +- 提供清晰的API供控制器调用 + +**模型类型:** + +- **领域模型**:封装业务实体和规则 +- **视图模型**:为特定视图优化的数据结构 +- **数据模型**:直接映射数据存储结构 + +**示例(伪代码):** + +```java +public class UserModel { + public User ValidateLogin(string username, string password) { + // 业务逻辑:验证用户 + var user = db.FindUser(username); + return VerifyPassword(user, password) ? user : null; + } + + public bool UpdateProfile(User user) { + // 业务逻辑:更新验证 + return Validate(user) && db.Update(user); + } +} +``` + +模型应专注于“做什么”,而非“如何展示”,确保业务逻辑的纯粹性和可重用性。 + +## 练习 \ No newline at end of file -- Gitee