From 784643cbc4615338a2e7e606ce0cf41e0de6055e Mon Sep 17 00:00:00 2001 From: XuJiexian <3445002374@qq.com> Date: Fri, 29 May 2026 22:20:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=20w9=20=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- w9/java-cli/.gitignore | 4 + w9/java-cli/README.md | 17 + w9/java-cli/pom.xml | 45 ++ .../java/com/example/datacollect/Main.java | 21 + .../example/datacollect/command/Command.java | 9 + .../datacollect/command/CrawlCommand.java | 27 + .../datacollect/command/ExitCommand.java | 24 + .../datacollect/command/HelpCommand.java | 23 + .../datacollect/command/HistoryCommand.java | 31 + .../datacollect/command/ListCommand.java | 23 + .../controller/CrawlerController.java | 53 ++ .../example/datacollect/model/Article.java | 73 ++ .../example/datacollect/view/ConsoleView.java | 42 + .../target/W9工程架构 - 教案v3.md | 758 ++++++++++++++++++ .../target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 0 w9/java-cli/target/w9-ppt.md | 530 ++++++++++++ w9/屏幕截图 2026-05-29 213836.png | Bin 0 -> 131484 bytes 18 files changed, 1685 insertions(+) create mode 100644 w9/java-cli/.gitignore create mode 100644 w9/java-cli/README.md create mode 100644 w9/java-cli/pom.xml create mode 100644 w9/java-cli/src/main/java/com/example/datacollect/Main.java create mode 100644 w9/java-cli/src/main/java/com/example/datacollect/command/Command.java create mode 100644 w9/java-cli/src/main/java/com/example/datacollect/command/CrawlCommand.java create mode 100644 w9/java-cli/src/main/java/com/example/datacollect/command/ExitCommand.java create mode 100644 w9/java-cli/src/main/java/com/example/datacollect/command/HelpCommand.java create mode 100644 w9/java-cli/src/main/java/com/example/datacollect/command/HistoryCommand.java create mode 100644 w9/java-cli/src/main/java/com/example/datacollect/command/ListCommand.java create mode 100644 w9/java-cli/src/main/java/com/example/datacollect/controller/CrawlerController.java create mode 100644 w9/java-cli/src/main/java/com/example/datacollect/model/Article.java create mode 100644 w9/java-cli/src/main/java/com/example/datacollect/view/ConsoleView.java create mode 100644 w9/java-cli/target/W9工程架构 - 教案v3.md create mode 100644 w9/java-cli/target/maven-archiver/pom.properties create mode 100644 w9/java-cli/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 w9/java-cli/target/w9-ppt.md create mode 100644 w9/屏幕截图 2026-05-29 213836.png diff --git a/w9/java-cli/.gitignore b/w9/java-cli/.gitignore new file mode 100644 index 0000000..0ebcf1a --- /dev/null +++ b/w9/java-cli/.gitignore @@ -0,0 +1,4 @@ +*.jar +*.jar +*.class +*.log \ No newline at end of file diff --git a/w9/java-cli/README.md b/w9/java-cli/README.md new file mode 100644 index 0000000..3ea02ec --- /dev/null +++ b/w9/java-cli/README.md @@ -0,0 +1,17 @@ +# DataCollect 教学项目 — 最小可运行版本 + +这是一个最小可用的 Java CLI 演示工程,目标:打印帮助信息以验证运行环境。 + +构建: +```bash +mvn -q package +``` + +运行(示例): +```bash +java -jar target/datacollect-cli-0.1.0-jar-with-dependencies.jar --help +``` + +项目结构(最小): +- `src/main/java/com/example/datacollect/Main.java` — CLI 入口,打印帮助 +- `pom.xml` — Maven 构建配置,生成可执行 jar diff --git a/w9/java-cli/pom.xml b/w9/java-cli/pom.xml new file mode 100644 index 0000000..01bc611 --- /dev/null +++ b/w9/java-cli/pom.xml @@ -0,0 +1,45 @@ + + 4.0.0 + com.example + datacollect-cli + 0.1.0 + + 11 + 11 + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + org.apache.maven.plugins + maven-assembly-plugin + 3.3.0 + + + + com.example.datacollect.Main + + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + + diff --git a/w9/java-cli/src/main/java/com/example/datacollect/Main.java b/w9/java-cli/src/main/java/com/example/datacollect/Main.java new file mode 100644 index 0000000..44d00aa --- /dev/null +++ b/w9/java-cli/src/main/java/com/example/datacollect/Main.java @@ -0,0 +1,21 @@ +package com.example.datacollect; + +import com.example.datacollect.controller.CrawlerController; +import com.example.datacollect.model.Article; +import com.example.datacollect.view.ConsoleView; +import java.util.ArrayList; +import java.util.List; + +public class Main { + + public static void main(String[] args) { + ConsoleView view = new ConsoleView(); + List
articles = new ArrayList<>(); + CrawlerController controller = new CrawlerController(view, articles); + + view.printSuccess("Welcome to CLI Crawler (w9_1)! Type help for commands."); + while (true) { + controller.handle(view.readLine()); + } + } +} diff --git a/w9/java-cli/src/main/java/com/example/datacollect/command/Command.java b/w9/java-cli/src/main/java/com/example/datacollect/command/Command.java new file mode 100644 index 0000000..24e59a6 --- /dev/null +++ b/w9/java-cli/src/main/java/com/example/datacollect/command/Command.java @@ -0,0 +1,9 @@ +package com.example.datacollect.command; + +import com.example.datacollect.model.Article; +import java.util.List; + +public interface Command { + String getName(); + void execute(String[] args, List
articles); +} diff --git a/w9/java-cli/src/main/java/com/example/datacollect/command/CrawlCommand.java b/w9/java-cli/src/main/java/com/example/datacollect/command/CrawlCommand.java new file mode 100644 index 0000000..45baea1 --- /dev/null +++ b/w9/java-cli/src/main/java/com/example/datacollect/command/CrawlCommand.java @@ -0,0 +1,27 @@ +package com.example.datacollect.command; + +import com.example.datacollect.model.Article; +import com.example.datacollect.view.ConsoleView; +import java.util.List; + +public class CrawlCommand implements Command { + private final ConsoleView view; + + public CrawlCommand(ConsoleView view) { + this.view = view; + } + + @Override + public String getName() { + return "crawl"; + } + + @Override + public void execute(String[] args, List
articles) { + if (args.length < 2) { + view.printError("Usage: crawl "); + return; + } + view.printInfo("Stub: would crawl " + args[1]); + } +} diff --git a/w9/java-cli/src/main/java/com/example/datacollect/command/ExitCommand.java b/w9/java-cli/src/main/java/com/example/datacollect/command/ExitCommand.java new file mode 100644 index 0000000..6946d85 --- /dev/null +++ b/w9/java-cli/src/main/java/com/example/datacollect/command/ExitCommand.java @@ -0,0 +1,24 @@ +package com.example.datacollect.command; + +import com.example.datacollect.model.Article; +import com.example.datacollect.view.ConsoleView; +import java.util.List; + +public class ExitCommand implements Command { + private final ConsoleView view; + + public ExitCommand(ConsoleView view) { + this.view = view; + } + + @Override + public String getName() { + return "exit"; + } + + @Override + public void execute(String[] args, List
articles) { + view.printSuccess("Bye!"); + System.exit(0); + } +} diff --git a/w9/java-cli/src/main/java/com/example/datacollect/command/HelpCommand.java b/w9/java-cli/src/main/java/com/example/datacollect/command/HelpCommand.java new file mode 100644 index 0000000..3c6597a --- /dev/null +++ b/w9/java-cli/src/main/java/com/example/datacollect/command/HelpCommand.java @@ -0,0 +1,23 @@ +package com.example.datacollect.command; + +import com.example.datacollect.model.Article; +import com.example.datacollect.view.ConsoleView; +import java.util.List; + +public class HelpCommand implements Command { + private final ConsoleView view; + + public HelpCommand(ConsoleView view) { + this.view = view; + } + + @Override + public String getName() { + return "help"; + } + + @Override + public void execute(String[] args, List
articles) { + view.printInfo("Commands: crawl , list, history, help, exit"); + } +} diff --git a/w9/java-cli/src/main/java/com/example/datacollect/command/HistoryCommand.java b/w9/java-cli/src/main/java/com/example/datacollect/command/HistoryCommand.java new file mode 100644 index 0000000..87aa2e2 --- /dev/null +++ b/w9/java-cli/src/main/java/com/example/datacollect/command/HistoryCommand.java @@ -0,0 +1,31 @@ +package com.example.datacollect.command; + +import com.example.datacollect.model.Article; +import com.example.datacollect.view.ConsoleView; +import java.util.List; + +public class HistoryCommand implements Command { + private final ConsoleView view; + private final List history; + + public HistoryCommand(ConsoleView view, List history) { + this.view = view; + this.history = history; + } + + @Override + public String getName() { + return "history"; + } + + @Override + public void execute(String[] args, List
articles) { + if (history.isEmpty()) { + view.printInfo("暂无命令历史记录。"); + return; + } + for (int i = 0; i < history.size(); i++) { + System.out.println((i + 1) + ". " + history.get(i)); + } + } +} \ No newline at end of file diff --git a/w9/java-cli/src/main/java/com/example/datacollect/command/ListCommand.java b/w9/java-cli/src/main/java/com/example/datacollect/command/ListCommand.java new file mode 100644 index 0000000..8eba2cd --- /dev/null +++ b/w9/java-cli/src/main/java/com/example/datacollect/command/ListCommand.java @@ -0,0 +1,23 @@ +package com.example.datacollect.command; + +import com.example.datacollect.model.Article; +import com.example.datacollect.view.ConsoleView; +import java.util.List; + +public class ListCommand implements Command { + private final ConsoleView view; + + public ListCommand(ConsoleView view) { + this.view = view; + } + + @Override + public String getName() { + return "list"; + } + + @Override + public void execute(String[] args, List
articles) { + view.display(articles); + } +} diff --git a/w9/java-cli/src/main/java/com/example/datacollect/controller/CrawlerController.java b/w9/java-cli/src/main/java/com/example/datacollect/controller/CrawlerController.java new file mode 100644 index 0000000..88e5c4f --- /dev/null +++ b/w9/java-cli/src/main/java/com/example/datacollect/controller/CrawlerController.java @@ -0,0 +1,53 @@ +package com.example.datacollect.controller; + +import com.example.datacollect.command.Command; +import com.example.datacollect.command.CrawlCommand; +import com.example.datacollect.command.ExitCommand; +import com.example.datacollect.command.HelpCommand; +import com.example.datacollect.command.HistoryCommand; +import com.example.datacollect.command.ListCommand; +import com.example.datacollect.model.Article; +import com.example.datacollect.view.ConsoleView; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class CrawlerController { + private final Map commands = new HashMap<>(); + private final ConsoleView view; + private final List
articles; + private final List history = new ArrayList<>(); + + public CrawlerController(ConsoleView view, List
articles) { + this.view = view; + this.articles = articles; + register(new HelpCommand(view)); + register(new ListCommand(view)); + register(new CrawlCommand(view)); + register(new ExitCommand(view)); + register(new HistoryCommand(view, history)); + } + + private void register(Command command) { + commands.put(command.getName(), command); + } + + public void handle(String input) { + String text = input == null ? "" : input.trim(); + if (text.isEmpty()) { + return; + } + + history.add(text); + + String[] args = text.split("\\s+"); + String cmdName = args[0].toLowerCase(); + Command command = commands.get(cmdName); + if (command == null) { + view.printError("Unknown command: " + cmdName); + return; + } + command.execute(args, articles); + } +} diff --git a/w9/java-cli/src/main/java/com/example/datacollect/model/Article.java b/w9/java-cli/src/main/java/com/example/datacollect/model/Article.java new file mode 100644 index 0000000..978c641 --- /dev/null +++ b/w9/java-cli/src/main/java/com/example/datacollect/model/Article.java @@ -0,0 +1,73 @@ +package com.example.datacollect.model; + +public class Article { + private String title; + private String url; + private String content; + private String author; + private String publishDate; + + public Article(String title, String url, String content) { + this.title = title; + this.url = url; + this.content = content; + } + + public Article(String title, String url, String content, String author, String publishDate) { + this.title = title; + this.url = url; + this.content = content; + this.author = author; + this.publishDate = publishDate; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getPublishDate() { + return publishDate; + } + + public void setPublishDate(String publishDate) { + this.publishDate = publishDate; + } + + @Override + public String toString() { + return "Article{" + + "title='" + title + '\'' + + ", url='" + url + '\'' + + ", author='" + author + '\'' + + ", publishDate='" + publishDate + '\'' + + '}'; + } +} diff --git a/w9/java-cli/src/main/java/com/example/datacollect/view/ConsoleView.java b/w9/java-cli/src/main/java/com/example/datacollect/view/ConsoleView.java new file mode 100644 index 0000000..3c1d47a --- /dev/null +++ b/w9/java-cli/src/main/java/com/example/datacollect/view/ConsoleView.java @@ -0,0 +1,42 @@ +package com.example.datacollect.view; + +import com.example.datacollect.model.Article; +import java.util.List; +import java.util.Scanner; + +public class ConsoleView { + private static final String ANSI_RESET = "\u001B[0m"; + private static final String ANSI_GREEN = "\u001B[32m"; + private static final String ANSI_RED = "\u001B[31m"; + private static final String ANSI_BLUE = "\u001B[34m"; + + private final Scanner scanner = new Scanner(System.in); + + public String readLine() { + System.out.print("> "); + return scanner.nextLine(); + } + + public void printSuccess(String msg) { + System.out.println(ANSI_GREEN + msg + ANSI_RESET); + } + + public void printError(String msg) { + System.out.println(ANSI_RED + msg + ANSI_RESET); + } + + public void printInfo(String msg) { + System.out.println(ANSI_BLUE + msg + ANSI_RESET); + } + + public void display(List
articles) { + if (articles.isEmpty()) { + printInfo("暂无文章,请先执行 crawl。"); + return; + } + for (int i = 0; i < articles.size(); i++) { + Article a = articles.get(i); + System.out.println((i + 1) + ". " + a.getTitle() + " | " + a.getUrl()); + } + } +} diff --git a/w9/java-cli/target/W9工程架构 - 教案v3.md b/w9/java-cli/target/W9工程架构 - 教案v3.md new file mode 100644 index 0000000..09de868 --- /dev/null +++ b/w9/java-cli/target/W9工程架构 - 教案v3.md @@ -0,0 +1,758 @@ +--- + +# 教案:《高级程序设计》第9周——工程架构:从"写代码"到"造系统" + +| 项目 | 内容 | +|------|------| +| **课程名称** | 高级程序设计 | +| **周次** | 第9周 | +| **主题** | 工程架构——从"写代码"到"造系统" | +| **学时** | 2学时(90分钟) | +| **授课对象** | 具备Python基础、已完成Java面向对象特性学习的学生 | +| **教学环境** | JDK 17+、IntelliJ IDEA、Maven(模板) | +| **前情提要** | 本课程原计划使用JavaFX GUI,后根据教学反馈转向CLI + MVC + 爬虫工程化 | + +--- + +## 教学调整说明:为什么选择CLI而不是GUI? + +> **原计划**:JavaFX桌面应用 → **新计划**:CLI命令行应用 + +| 维度 | GUI (JavaFX) | CLI (命令行) | +|------|--------------|-------------| +| **学习重心** | 布局、控件、事件监听 | 架构、分层、命令路由 | +| **学生痛点** | "窗口点击"与后端能力无关 | 真正锻炼工程思维 | +| **AI辅助** | AI生成FXML,学生看不懂 | AI辅助重构架构 | +| **工程化** | 脱离真实后端开发场景 | 模拟真实服务器/大数据开发 | +| **核心转型** | "视觉装饰"优先 | "逻辑架构"优先 | + +**决策理由**: +1. **985学生需要的是工程思维**,不是拖控件 +2. **接口抽象**是弱项,CLI + MVC更能暴露这个问题 +3. **彩色终端**足够酷炫,且代码量可控 + +**更深层的教育价值**: +> 在GUI框架中,架构已被框架强制划定,学生只是"遵守规矩";而CLI世界里没有任何框架告诉你模型在哪、视图在哪——**当外部约束消失,内部的工程纪律才真正建立**。这正是本节课要传递的核心精神。 + +--- + +## 一、教学目标 + +| 目标维度 | 具体描述 | +|----------|----------| +| **知识掌握** | 理解MVC架构的职责划分及其演化脉络;掌握Maven项目结构与pom.xml基础;理解Command模式的路由原理。 | +| **工程实践** | 能搭建规范的Maven项目包结构;能实现基于Scanner的控制台交互;能用Command接口实现可扩展的命令路由;能识别架构中的"越权行为"。 | +| **思维转型** | 从"一个类写全部"转向"分层解耦";从"修改现有代码"转向"新增类实现功能";从"满足功能"转向"代码的工程洁癖"。 | +| **工具应用** | 利用AI辅助审查MVC职责越权;让AI扮演"架构审计师"检查分层是否清晰;理解AI生成代码中的架构缺陷。 | + +--- + +## 二、教学重点与难点 + +| 项目 | 内容 | 突破方法 | +|------|------|----------| +| **重点** | MVC三层职责划分、CLI交互实现、Command接口解耦、代码中的工程细节(常量、输出归属) | 以"新增命令需要改什么"为切入点,展示Command模式的优势;通过现场"代码找茬"强化细节意识 | +| **难点** | Controller不写业务逻辑、Command接口的多态实现、共享数据模型的设计缺陷识别 | 现场演示:增加一个命令只需新建类,无需修改Controller;暴露`List
`共享引用的问题并预告解决方案 | + +--- + +## 三、教学过程设计(90分钟) + +| 环节 | 时间 | 教学内容 | 师生活动 | AI协同点 | +|------|------|----------|----------|----------| +| **1. 痛点引入:从脚本到工程的鸿沟** | 10' | 展示"意大利面"式爬虫代码,演示改一处需要动全身 | **教师演示**:现场展示一段混乱代码,让学生找问题 | 用AI分析代码耦合度 | +| **2. CLI vs GUI:架构选择的思考** | 10' | 对比两种方案的优缺点,解释为什么CLI更适合培养工程思维 | **教师讲解**:用对比表格说明选择CLI的理由 | — | +| **3. MVC分层设计** | 20' | 讲解Model/View/Controller三层职责,用"餐厅类比"强化理解,随后批判类比局限性 | **教师讲解**:配合架构图讲解三层交互,引导学生寻找类比破绽 | 用AI生成MVC职责对照表 | +| **4. Command模式:可扩展的命令路由** | 15' | 引入Command接口,解释"一个命令就是一个类" | **类比**:Command像酒店的服务部门,Controller是前台 | 让AI解释Command模式的多态原理 | +| **5. Maven模板与环境** | 5' | 直接使用提供的Maven模板,讲解目录结构 | **教师演示**:解压模板 → IDEA打开 → 运行 | — | +| **6. 三层代码落地** | 20' | **Model**:Article实体
**View**:ConsoleView(ANSI常量)
**Command接口**+实现
**Controller**:Map路由 | **教师演示**:分步写出代码,刻意埋入1~2个"越权细节"让学生找茬 | 学生用AI做"架构审计" | +| **7. 架构反思与展望** | 5' | 指出当前`List
`共享引用的问题,预告W10策略模式与仓库层 | **师生互动**:你发现这个设计有什么风险? | 让AI分析共享可变状态的危害 | +| **8. 实践任务:空壳程序** | 5' | 搭建完整包结构,实现CLI循环 | 学生现场编码,教师巡视 | 完成后用AI检查包结构 | +| **9. 总结与过渡** | 5' | 本周实现了"骨架+命令可扩展",下周填入"灵魂"——解析器,并解决数据安全问题 | 总结Command模式优势,预告策略模式 | — | + +--- + +## 四、核心教学内容脚本 + +### 4.1 痛点引入:从脚本到工程的鸿沟(10分钟) + +**教师口播**: +> "同学们,前8周我们学的是Java语法,从变量到类,从继承到接口。但有一个问题:代码写完之后,怎么组织?" +> +> "来看这段代码——这是某个同学写的'爬虫',他一个人完成了一个'完整'的项目。" + +**展示"脚本式"代码**: +```java +public class Crawler { + public static void main(String[] args) { + System.out.print("请输入URL: "); + Scanner scanner = new Scanner(System.in); + String url = scanner.nextLine(); + + List titles = new ArrayList(); + try { + Document doc = Jsoup.connect(url).get(); + Elements elements = doc.select(".post-title"); + for (Element e : elements) { + String title = e.text(); + System.out.println("标题: " + title); + titles.add(title); + } + } catch (Exception ex) { + System.out.println("出错啦: " + ex.getMessage()); + } + } +} +``` + +**提问引导**: +1. "如果我想把标题保存到文件,要改哪里?" +2. "如果我想支持另一个网站,它的HTML结构不一样,要怎么办?" +3. "如果我想让输出变成彩色,要改哪里?" + +**痛点提炼**: +> "看到了吗?才60行代码,已经'牵一发而动全身'了。这就是一个'脚本'的宿命——功能全混在一起,改一个小需求,整个文件都要翻。" +> +> "这周我们要解决:**怎么让代码'改起来不疼'?**" + +--- + +### 4.2 CLI vs GUI:架构选择的思考(10分钟) + +**教师口播**: +> "既然要写一个'完整'的爬虫应用,我们有两个选择:图形界面(GUI)或命令行界面(CLI)。为什么我推荐CLI而不是GUI?" + +**对比表格** + +| 维度 | GUI (JavaFX) | CLI (命令行) | +|------|--------------|-------------| +| **代码量** | FXML + Controller + CSS,大量模板代码 | 纯Java,代码量可控 | +| **学习重心** | 布局、控件、事件监听 | 架构、分层、命令路由 | +| **后端能力** | 几乎无关 | 模拟真实服务器开发 | +| **可测试性** | 难(需要UI测试框架) | 易(直接测试Command类) | +| **工程思维** | 弱(关注视觉) | 强(关注逻辑) | + +**核心观点**: +> **CLI更需要MVC!** GUI有现成的事件系统(点击按钮→触发事件),而CLI只有字符流。**没有架构,分分钟写成脚本**。MVC在CLI里是"刚需",不是"装饰"。 +> +> **更深一层**:在GUI里,框架已经硬塞给你一套架构,你只是在填空;但在CLI里,所有结构都必须由你亲手搭建。**当外部约束消失,内部的工程纪律才真正开始建立**——这才是本节课的真正目的。 + +**CLI也能很酷**: +- ANSI彩色输出(红/绿/黄/蓝) +- 表格展示数据 +- 进度条动画 +- 模拟真实大数据开发场景 + +--- + +### 4.3 MVC分层设计(20分钟) + +#### 4.3.1 MVC的起源与演进 + +**教师口播**: +> "MVC不是新东西,它是1970年代为桌面应用设计的架构思想。但它的核心——'职责分离'——在任何软件里都适用。" + +| 年代 | 场景 | MVC的角色 | +|------|------|----------| +| 1970s | Smalltalk-72 GUI | 最早的用户界面架构 | +| 1990s | Web开发 (Struts) | 后端模板引擎 | +| 2000s | ASP.NET MVC | 现代Web框架 | +| 2020s | CLI + API | 解耦业务逻辑与表现层 | + +#### 4.3.2 从GUI到CLI的映射 + +| GUI组件 | CLI对应 | 说明 | +|--------|--------|------| +| 窗口/按钮 | 命令行输入 | **View = 用户交互** | +| 数据模型 | Article实体类 | **Model = 数据结构** | +| 事件监听 | Command路由 | **Controller = 调度** | + +#### 4.3.3 MVC三层职责 + +**架构图示**: + +``` +┌─────────────────────────────────────────┐ +│ 入口 │ +│ (main方法) │ +└─────────────────┬───────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────┐ +│ Controller │ +│ - 接收命令(crawl, help, exit) │ +│ - 分发给对应的Command │ +│ 【口诀】:Controller不管"怎么做", │ +│ 只管"派给谁" │ +└─────────┬───────────────┬───────────────┘ + │ │ + ▼ ▼ +┌─────────────────┐ ┌─────────────────┐ +│ Model │ │ View │ +│ - 数据实体 │ │ - 输入解析 │ +│ - 业务逻辑 │ │ - 输出格式化 │ +│ 【口诀】: │ │ 【口诀】: │ +│ Model管"数据" │ │ View管"呈现" │ +└─────────────────┘ └─────────────────┘ +``` + +**三层职责详解** + +| 层级 | 职责 | 典型代码 | 禁止做什么 | +|------|------|----------|------------| +| **Model** | 数据结构 + 业务逻辑 | `class Article { String title; String content; }` | 不能有`System.out.println`,不能有`Scanner` | +| **View** | 接收用户输入 + 格式化输出 | `class ConsoleView { String readInput(); void print(String); }` | 不能写爬虫逻辑,只做"传声筒" | +| **Controller** | 协调调度 | `class CrawlerController { void handle(String cmd) { ... } }` | 不能直接写业务细节,委托给Command | + +#### 4.3.4 类比强化:"餐厅类比" + +> "把MVC想象成一家餐厅: +> - **Model是后厨**:只管做菜(数据加工),不管谁来吃、怎么端 +> - **View是服务员**:只管端菜和收钱(输入输出),不管菜怎么做 +> - **Controller是前台**:只管把顾客的点单传给后厨,把做好的菜端给顾客 +> +> 如果后厨开始管'谁来吃饭',这餐厅就乱了。" + +#### 4.3.5 对"餐厅类比"的批判性思考(关键!) + +**教师导引**: +> "刚才的类比好理解吗?很好。但任何一个类比都有它的边界,如果把它当成真理,就会出问题。现在我们来给这个类比'找茬'。" + +**提问学生**: +1. "后厨真的完全不知道客人是谁吗?如果客人有忌口(比如不吃香菜),这个信息需不需要传到后厨?" +2. "服务员只是端菜吗?在真实餐厅里,服务员经常向后厨反馈'客人觉得今天的菜咸了',这属于View→Model的反向影响吗?" +3. "在这个类比里,我们把前台(Controller)和后厨(Model)的关系说成单向的。但实际上,后厨做完了菜,需要通知前台'菜好了',这不就是**观察者模式**吗?" + +**点明本质**: +> "实际MVC的数据流向常常是**双向**的:Controller调用Model的方法改变数据,Model变化后又通知View更新显示。只不过在本次CLI项目中,我们暂时使用'请求-响应'的单向简化模型——用户输入命令,系统处理,然后立即输出结果。这个简化版够用,但你要知道完整的MVC是更动态的。随着系统复杂,Model层需要一个专门的'仓库类'来管理数据,并通知视图刷新——这正是W10我们将要深入的内容。" + +#### 4.3.6 MVC的数据流向(本课程简化版) + +``` +CLI用户输入 + ↓ +View(解析命令字符串) + ↓ +Controller(找到对应Command) + ↓ +Command.execute()(执行业务逻辑) + ↓ +Model(Article数据,目前暂存于List) + ↓ +View(display()展示数据) + ↓ +CLI终端显示 +``` + +--- + +### 4.4 Command模式:可扩展的命令路由(15分钟) + +**教师口播**: +> "现在引入一个设计模式——Command(命令)模式。它的核心思想是:**一个命令就是一个类**。" + +#### 4.4.1 为什么需要Command模式? + +**演示:增加一个命令的代价(switch-case版)** +```java +// 现状代码 +switch (cmd) { + case "crawl": handleCrawl(); break; + case "help": showHelp(); break; + // 如果要增加 list 命令? + // 1. 加 case "list" + // 2. 加 handleList() 方法 + // 3. 可能还要改其他地方... +} +``` + +**提问**: +- "如果我想增加10个命令,这个类要改多少次?" +- "如果我不小心删了一个case,整个程序还能跑吗?" + +**痛点提炼**: +> "每加一个功能,就要在这个类里戳一个洞。**这就是'肥控制器'陷阱**——所有的逻辑都堆在Controller里,它变成了新的'意大利面'。" + +#### 4.4.2 Command模式的四个要素 + +| 要素 | 角色 | 示例 | +|------|------|------| +| **Command接口** | 抽象的"订单" | `Command` 接口 | +| **ConcreteCommand** | 具体的订单 | `HelpCommand`、`CrawlCommand` | +| **Invoker** | 接单的前台 | `CrawlerController` | +| **Receiver** | 执行者 | `ConsoleView`、`ArticleRepository` | + +#### 4.4.3 Command接口定义 + +```java +// src/main/java/com/crawler/command/Command.java +package com.crawler.command; + +import com.crawler.model.Article; +import java.util.List; + +public interface Command { + String getName(); // 命令名,如 "crawl" + void execute(String[] args, List
articles); // 执行逻辑 +} +``` + +#### 4.4.4 Controller的变革(从switch到Map) + +```java +// 修改后的Controller +public class CrawlerController { + private Map commands; // 用Map存命令 + private ConsoleView view; // 持有View以输出错误 + + public CrawlerController(ConsoleView view, List
articles) { + this.view = view; + this.commands = new HashMap<>(); + // 增加命令无需改Controller代码,只需在这里注册 + commands.put("crawl", new CrawlCommand(view)); + commands.put("help", new HelpCommand(view)); + commands.put("list", new ListCommand(view)); + commands.put("exit", new ExitCommand(view)); + } + + public void handle(String input) { + if (input.isEmpty()) return; + String[] parts = input.split("\\s+"); + String cmd = parts[0].toLowerCase(); + + Command command = commands.get(cmd); + if (command == null) { + view.printError("Unknown command: " + cmd); // 通过View输出,而非直接System.out + return; + } + + // 执行命令,传入参数和文章列表 + command.execute(parts, articles); + } +} +``` + +**对比表格** + +| 维度 | switch-case | Command模式 | +|------|-------------|-------------| +| 增加命令 | 要改Controller | 新建一个类 | +| 多态体验 | 无 | execute()的多态调用 | +| 可测试性 | 难 | 每个Command可单独测试 | +| 代码量 | 少 | 多,但更清晰 | + +**类比强化**: +> "Command模式就像**酒店的客房服务**:每个服务(清理、送餐、按摩)都是一个独立的部门。前台(Controller)只负责接电话,然后把请求'派发'给对应的部门。部门自己知道怎么干活,不需要前台教。" +> +> "如果想新增一个服务,前台只需要'登记'一下,不需要把现有部门重新装修。" + +--- + +### 4.5 Maven模板与环境(5分钟) + +**教师口播**: +> "这周我们不发愁pom.xml配置。我已经把 Maven 模板准备好了,你们只需要解压、打开、运行。" + +**模板使用流程**: +``` +1. 解压 [my-crawler-template.zip] +2. 用 IDEA 打开文件夹 +3. 右键 pom.xml → Maven → Reload Project +4. 运行 App.java +``` + +**标准目录结构**: +``` +src/main/java/com/crawler/ +├── model/ +│ └── Article.java +├── view/ +│ └── ConsoleView.java +├── command/ +│ ├── Command.java (接口) +│ ├── CrawlCommand.java +│ ├── HelpCommand.java +│ ├── ListCommand.java +│ └── ExitCommand.java +└── controller/ + └── CrawlerController.java +``` + +--- + +### 4.6 代码落地(20分钟) + +#### 4.6.1 Model层:Article实体 + +```java +// src/main/java/com/crawler/model/Article.java +package com.crawler.model; + +public class Article { + private String title; + private String url; + private String content; + + public Article(String title, String url, String content) { + this.title = title; + this.url = url; + this.content = content; + } + + public String getTitle() { return title; } + public void setTitle(String title) { this.title = title; } + public String getUrl() { return url; } + public void setUrl(String url) { this.url = url; } + public String getContent() { return content; } + public void setContent(String content) { this.content = content; } + + @Override + public String toString() { + return "Article{title='" + title + "', url='" + url + "'}"; + } +} +``` + +#### 4.6.2 View层:ANSI常量集中管理(工程细节!) + +```java +// src/main/java/com/crawler/view/ConsoleView.java +package com.crawler.view; + +import com.crawler.model.Article; +import java.util.List; +import java.util.Scanner; + +public class ConsoleView { + // ANSI颜色常量——集中管理,避免散落各处 + private static final String ANSI_GREEN = "\033[32m"; + private static final String ANSI_RED = "\033[31m"; + private static final String ANSI_CYAN = "\033[36m"; + private static final String ANSI_RESET = "\033[0m"; + + private Scanner scanner = new Scanner(System.in); + + public String readLine() { + System.out.print("crawler> "); + return scanner.nextLine().trim(); + } + + public void print(String msg) { + System.out.println(msg); + } + + public void printSuccess(String msg) { + print(ANSI_GREEN + msg + ANSI_RESET); + } + + public void printError(String msg) { + print(ANSI_RED + msg + ANSI_RESET); + } + + public void printInfo(String msg) { + print(ANSI_CYAN + msg + ANSI_RESET); + } + + // 展示文章列表 + public void display(List
articles) { + if (articles.isEmpty()) { + printInfo("No articles yet. Use 'crawl ' first."); + return; + } + print("+----------+--------------------------------+"); + print("| Title | URL |"); + print("+----------+--------------------------------+"); + for (Article a : articles) { + String title = a.getTitle(); + if (title.length() > 10) title = title.substring(0, 10) + ".."; + String url = a.getUrl(); + if (url.length() > 30) url = url.substring(0, 27) + "..."; + print("| " + String.format("%-10s", title) + " | " + url + " |"); + } + print("+----------+--------------------------------+"); + printInfo("Total: " + articles.size() + " articles"); + } +} +``` + +**教师提示**: +> "注意:所有ANSI转义码都被定义为`private static final`常量。如果把`\033[32m`散落在项目各处,一旦想调整颜色,就得满世界去改——这正是我们之前痛批的'意大利面'。**这就是工程细节**。" + +#### 4.6.3 Command接口与四个实现(全部通过View输出) + +```java +// Command.java +public interface Command { + String getName(); + void execute(String[] args, List
articles); +} + +// HelpCommand.java +public class HelpCommand implements Command { + private ConsoleView view; + public HelpCommand(ConsoleView v) { this.view = v; } + public String getName() { return "help"; } + public void execute(String[] args, List
articles) { + view.printInfo("Commands: crawl , list, help, exit"); + } +} + +// ListCommand.java +public class ListCommand implements Command { + private ConsoleView view; + public ListCommand(ConsoleView v) { this.view = v; } + public String getName() { return "list"; } + public void execute(String[] args, List
articles) { + view.display(articles); + } +} + +// CrawlCommand.java (存根) +public class CrawlCommand implements Command { + private ConsoleView view; + public CrawlCommand(ConsoleView v) { this.view = v; } + public String getName() { return "crawl"; } + public void execute(String[] args, List
articles) { + if (args.length < 2) { + view.printError("Usage: crawl "); + return; + } + view.printInfo("Stub: Would crawl " + args[1]); + } +} + +// ExitCommand.java +public class ExitCommand implements Command { + private ConsoleView view; + public ExitCommand(ConsoleView v) { this.view = v; } + public String getName() { return "exit"; } + public void execute(String[] args, List
articles) { + view.printSuccess("Bye!"); // 全部输出都通过View,绝不让System.out直接出现在这里 + System.exit(0); + } +} +``` + +**故意埋设的"找茬点"**: +> "我在刚才的代码里有没有隐藏违反MVC原则的地方?`CrawlCommand`的存根里,`view.printInfo("Stub: Would crawl " + args[1]);` —— 这个字符串拼接算是"业务逻辑"吗?留给大家用AI架构审计时讨论。 + +#### 4.6.4 Controller:Map路由(全部通过View输出) + +```java +// src/main/java/com/crawler/controller/CrawlerController.java +package com.crawler.controller; + +import com.crawler.command.*; +import com.crawler.model.Article; +import com.crawler.view.ConsoleView; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class CrawlerController { + private Map commands = new HashMap<>(); + private ConsoleView view; // 持有View + private List
articles; + + public CrawlerController(ConsoleView view, List
articles) { + this.view = view; + this.articles = articles; + commands.put("help", new HelpCommand(view)); + commands.put("list", new ListCommand(view)); + commands.put("crawl", new CrawlCommand(view)); + commands.put("exit", new ExitCommand(view)); + } + + public void handle(String input) { + if (input.isEmpty()) return; + String[] parts = input.split("\\s+"); + String cmdName = parts[0].toLowerCase(); + + Command cmd = commands.get(cmdName); + if (cmd == null) { + view.printError("Unknown command: " + cmdName); // 错误信息也走View! + return; + } + cmd.execute(parts, articles); + } +} +``` + +#### 4.6.5 main方法:组装 + +```java +// src/main/java/com/crawler/App.java +package com.crawler; + +import com.crawler.controller.CrawlerController; +import com.crawler.model.Article; +import com.crawler.view.ConsoleView; +import java.util.ArrayList; +import java.util.List; + +public class App { + public static void main(String[] args) { + ConsoleView view = new ConsoleView(); + List
articles = new ArrayList<>(); + CrawlerController controller = new CrawlerController(view, articles); + + view.printSuccess("Welcome to CLI Crawler!"); + view.printInfo("Type 'help' for commands."); + + while (true) { + controller.handle(view.readLine()); + } + } +} +``` + +#### 4.6.6 架构反思与展望:共享List
的隐患(关键!) + +**教师口播**: +> "现在这个架构已经可用了。但请大家审视一下:我们所有的Command都直接拿到了`List
`的引用。换句话说,任何一个命令都可以随意增、删、改这个列表。" +> +> "这就好像一家酒店,所有服务员、厨师、清洁工都能随意进出保险箱——**数据结构完全裸奔了**。" + +**提问**: +- "如果CrawlCommand不小心写错了代码,把一个null塞进articles,HelpCommand会不会受影响?" +- "如果未来我们要在添加文章时也写入日志文件,现在的设计能优雅实现吗?还是得在所有Command里分别加日志代码?" + +**预告解决方案**: +> "下周,我们将引入**策略模式**和一个真正的**Model仓库层(ArticleRepository)**。这个仓库会把`List`封装起来,对外只提供`add()`、`getAll()`等安全接口。任何命令想修改数据,都必须通过仓库。这就是从'数据结构'到'模型层'的进化——我们W9先搭骨架,W10给它装上盔甲。" + +--- + +### 4.7 实践任务(5分钟) + +**任务要求**: +1. 使用Maven模板创建项目 +2. 实现完整包结构(model/view/command/controller) +3. 实现4个Command:help/list/crawl/exit +4. `list`命令能展示已抓取的文章 +5. 运行并测试循环 +6. **代码找茬(额外加分)**:找出你自己代码中是否存在`System.out`直接调用、硬编码ANSI字符串等"越权行为" + +**验收标准**: +- [x] Maven编译通过 +- [x] Command接口和4个实现分离在不同文件 +- [x] Controller里没有switch-case +- [x] 新增命令只需新建类,不改Controller +- [x] list命令能正确显示空列表 +- [x] 所有输出均通过ConsoleView完成,无直接System.out.println(main除外) +- [x] ANSI颜色码集中定义为View常量 + +--- + +## 五、课后作业 + +### 5.1 必做任务 + +1. **完善Article**:增加`author`、`publishDate`字段 +2. **★ HistoryCommand(强制作业)**: + - 实现`history`命令,记录用户输入过的所有命令 + - 使用`List`存储历史(复习W8集合) + - 示例输出: + ``` + crawler> history + 1. help + 2. list + 3. crawl https://example.com + ``` +3. **AI架构审计**:将类名和方法名发给AI,指令: + > "作为Java架构审计师,请检查我的MVC三层划分是否存在越权行为?Model层是否包含输入输出代码?View层是否越权写了业务逻辑?有没有地方直接使用了System.out或硬编码ANSI码?" + +### 5.2 选做任务 + +1. **命令别名**:给`crawl`增加别名`c`,`help`增加别名`h` +2. **URL验证**:检查URL格式是否以http://或https://开头 +3. **暗色主题**:实现不同的配色方案(利用View中的ANSI常量,只需修改一处即可) +4. **思考并回答**:分析`List
`共享引用的潜在风险,写一段200字的小结 + +### 5.3 思考题 + +1. **Command vs switch-case**:增加10个命令,哪种方式代码改动量更小? +2. **如果不用Command接口,直接用Map存命令类行不行?** 接口的意义是什么? +3. **Controller里的`commands.put()`能否减少?** 提示:思考"注册机制" +4. **为什么ExitCommand里的`view.printSuccess("Bye!")`比直接`System.out.println`更"MVC"?** 提示:回忆View的职责 + +--- + +## 六、AI协同升级 + +### 架构审计师任务(必做) + +**学生执行步骤**: +1. 列出项目中所有类名(不含方法实现) +2. 将类名列表发给AI +3. 输入指令: + > "作为Java架构审计师,请检查我的MVC三层划分是否清晰。Model层是否包含了不应该有的代码(Scanner/System.out)?View层是否越权写了业务逻辑?请指出任何一处直接使用System.out.println的地方,并建议如何改正。" + +**预期AI输出**: +- 指出哪一层有越权行为 +- 建议如何整改 +- 评价整体架构健康度 + +### 进阶AI探究(选做) + +> "假设我的Command接口中execute方法接收了一个`List
`参数,请分析这种设计在工程上有什么隐患,并给出重构建议。" + +--- + +## 七、教学反思与调整记录 + +| 日期 | 事项 | 调整内容 | +|------|------|----------| +| 2026-04-28 | 首次编写 | 基于CLI+MVC重构 | +| 2026-04-30 | 教授反馈 | 引入Command模式、提供Maven模板、升级AI协同比 | +| 2026-04-30 | 逻辑重排 | 按"问题→选择→架构→模式"顺序重写 | +| 2026-05-01 | v2 vs V3合并 | 融合深度改进:增加教育哲学、批判性思考、ANSI常量、共享List隐患、故意埋坑 | + +--- + +## 附录1:Maven模板说明 + +> 老师提供`my-crawler-template.zip`压缩包,包含: +> - pom.xml(含Jsoup依赖) +> - 空的src/main/java结构 +> - .gitignore + +## 附录2:常见问题速查 + +| 问题 | 解答 | +|------|------| +| IDEA不识别pom.xml | 右键 pom.xml → Maven → Reload Project | +| 中文乱码 | Settings → Editor → File Encodings → UTF-8 | +| 包名大小写 | 包名全小写,类名首字母大写 | +| Command找不到 | 检查是否 implements Command,是否 @Override getName() | +| 命令不生效 | 检查 commands.put() 是否注册了该命令 | +| 输出颜色乱码 | IDEA控制台需支持ANSI,Windows下建议使用Windows Terminal或调整设置 | +| 我的System.out为什么被老师说越权 | View层才是与用户交互的唯一出口,所有输出都应通过View,这样将来改成GUI或日志时只需改View | + +## 附录3:教学逻辑说明 + +| 顺序 | 内容 | 设计理由 | +|------|------|----------| +| 1 | 痛点引入 | 从问题出发,让学生感受"为什么需要架构" | +| 2 | CLI vs GUI | 解释技术选型,建立"工程思维 > 视觉装饰"的认知 | +| 3 | MVC分层 | 核心架构概念,理解职责分离,通过类比及批判加深理解 | +| 4 | Command模式 | 具体实现方式,解决"肥控制器"问题 | +| 5 | Maven | 工具链支持 | +| 6 | 代码落地 | 实践验证,刻意植入细节规范,训练工程洁癖 | +| 7 | 架构反思 | 暴露共享可变状态隐患,为W10策略模式+仓库层做铺垫 | +| 8 | 实践任务 | 现场编码验证 | +| 9 | 总结 | 强化认知,预告下周 | + +--- + +## 版本说明 + +- **v1**:首次编写,CLI+MVC基础框架 +- **v2**:按"问题→选择→架构→模式"逻辑重排 +- **v3 (本版)**:融合v2结构 + V3深度改进,包含: + - 更深的CLI教育哲学 + - 餐厅类比批判性思考 + - ANSI常量集中管理工程细节 + - 全部输出走View + - 共享List架构隐患反思 + - 故意埋坑让学生找茬 + - W10铺垫(策略模式+仓库层) \ No newline at end of file diff --git a/w9/java-cli/target/maven-archiver/pom.properties b/w9/java-cli/target/maven-archiver/pom.properties new file mode 100644 index 0000000..08a8f9f --- /dev/null +++ b/w9/java-cli/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Apr 30 11:50:54 CST 2026 +artifactId=datacollect-cli +groupId=com.example +version=0.1.0 diff --git a/w9/java-cli/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/w9/java-cli/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/w9/java-cli/target/w9-ppt.md b/w9/java-cli/target/w9-ppt.md new file mode 100644 index 0000000..5ddd5ad --- /dev/null +++ b/w9/java-cli/target/w9-ppt.md @@ -0,0 +1,530 @@ +## 高级程序设计 · 第9周 + +#### 工程架构:从"写代码"到"造系统" + +##### CLI + MVC + Command模式实战 + +--- + +### 📌 本周导航 + +- 痛点引入:脚本的宿命 +- CLI vs GUI:为什么选命令行? +- MVC分层:职责分离的艺术 +- Command模式:可扩展的路由 +- Maven模板:工程化第一步 +- 代码落地:从接口到实现 +- 架构反思:共享数据的隐患 +- 实践任务 + 课后作业 + +--- + +### 1️⃣ 痛点引入:从脚本到工程的鸿沟 + +#### 这是一段“意大利面”爬虫 + +```java +public class Crawler { + public static void main(String[] args) { + System.out.print("请输入URL: "); + Scanner scanner = new Scanner(System.in); + String url = scanner.nextLine(); + List titles = new ArrayList(); + try { + Document doc = Jsoup.connect(url).get(); + Elements elements = doc.select(".post-title"); + for (Element e : elements) { + String title = e.text(); + System.out.println("标题: " + title); + titles.add(title); + } + } catch (Exception ex) { + System.out.println("出错啦: " + ex.getMessage()); + } + } +} +``` + +--- + +### 脚本的三大痛点 + +| 需求 | 需要改哪里? | +|------|--------------| +| 保存标题到文件 | 改 main 内部逻辑 | +| 支持不同网站结构 | 全部重写解析代码 | +| 彩色输出 | 一个一个改 print | + +> 😫 **牵一发而动全身 → 改起来疼** + +### 本周目标:**让代码“改起来不疼”** + +--- + +## 2️⃣ CLI vs GUI:架构选择的思考 + +### 图形界面 vs 命令行 + +| 维度 | GUI (JavaFX) | CLI (命令行) | +|------|--------------|-------------| +| 学习重心 | 布局、控件、事件 | **架构、分层、路由** | +| 后端能力 | 弱 | 模拟真实服务器 | +| 工程思维 | 弱(关注视觉) | **强(关注逻辑)** | +| 可测试性 | 难 | 易 | + +--- + +## 核心观点 + +> **CLI 更需要 MVC!** + +- GUI 有现成事件系统,框架强塞给你一套架构 +- CLI 只有字符流 → **没有架构,分分钟写成脚本** + +> 🎯 **当外部约束消失,内部的工程纪律才真正开始建立** + +### CLI 也能很酷 + +- ANSI 彩色输出 +- 表格展示数据 +- 模拟大数据/后端开发 + +--- + +## 3️⃣ MVC 分层设计 + +### MVC 的起源与演进 + +| 年代 | 场景 | MVC的角色 | +|------|------|----------| +| 1970s | Smalltalk-72 GUI | 最早的用户界面架构 | +| 1990s | Web开发 (Struts) | 后端模板引擎 | +| 2000s | ASP.NET MVC | 现代Web框架 | +| 2020s | CLI + API | 解耦业务逻辑与表现层 | + +**核心不变:职责分离** + +--- + +## MVC 三层职责 + +![[mvc.png]] +``` +┌─────────────────────────────────────────┐ +│ 入口 │ +│ (main方法) │ +└─────────────────┬───────────────────────┘ + ▼ +┌─────────────────────────────────────────┐ +│ Controller │ +│ 只管"派给谁",不管"怎么做" │ +└─────────┬───────────────┬───────────────┘ + ▼ ▼ +┌─────────────────┐ ┌─────────────────┐ +│ Model │ │ View │ +│ 管"数据" │ │ 管"呈现" │ +│ + 业务逻辑 │ │ + 输入输出 │ +└─────────────────┘ └─────────────────┘ +``` + +--- + +## 三层“禁止做什么” + +| 层级 | 禁止行为 | +| -------------- | -------------------------------------- | +| **Model** | 不能有 `System.out.println`,不能有 `Scanner` | +| **View** | 不能写爬虫逻辑,只做“传声筒” | +| **Controller** | 不能直接写业务细节,委托给 Command | + +> 🔴 **越权就是架构腐败的开始** + +--- + +## 🍽️ 餐厅类比(帮助理解) + +- **Model = 后厨**:只管做菜,不管谁来吃、怎么端 +- **View = 服务员**:只管端菜和收钱,不管菜怎么做 +- **Controller = 前台**:接单 → 派给后厨 → 叫服务员上菜 + +--- + +## 🤔 对类比的批判性思考(关键!) + +> 任何类比都有边界,不要当成真理 + +| 场景 | 暴露的问题 | +|------|------------| +| 客人有忌口(不吃香菜) | 信息需要传到后厨 → Model 可能需要知道 meta 信息 | +| 服务员反馈“今天的菜咸了” | View → Model 反向影响 | +| 后厨做完菜通知前台 | **观察者模式**,数据流可能是双向的 | + +**本课程简化模型**:请求-响应,单向流 + +--- + +## MVC 数据流向(本课程简化版) + +``` +CLI用户输入 + ↓ +View(解析命令字符串) + ↓ +Controller(找到对应Command) + ↓ +Command.execute()(执行业务逻辑) + ↓ +Model(Article数据,暂存于List) + ↓ +View(display()展示数据) + ↓ +CLI终端显示 +``` + +--- + +## 4️⃣ Command 模式:可扩展的命令路由 + +### 为什么需要 Command 模式? + +```java +switch (cmd) { + case "crawl": handleCrawl(); break; + case "help": showHelp(); break; + // 如果要增加 list 命令? + // 1. 加 case "list" + // 2. 加 handleList() 方法 + // 3. 可能还要改其他地方... +} +``` + +> 每加一个功能,就要在这个类里戳一个洞 → **肥控制器陷阱** + +--- + +## Command 模式的四个要素 + +| 要素 | 角色 | 示例 | +|------|------|------| +| Command接口 | 抽象的“订单” | `Command` | +| ConcreteCommand | 具体的订单 | `HelpCommand` | +| Invoker | 接单的前台 | `CrawlerController` | +| Receiver | 执行者 | `ConsoleView`、`ArticleRepository` | + +--- + +## Command 接口定义 + +```java +package com.crawler.command; + +import com.crawler.model.Article; +import java.util.List; + +public interface Command { + String getName(); + void execute(String[] args, List
articles); +} +``` + +--- + +## Controller 的变革:从 switch 到 Map + +```java +public class CrawlerController { + private Map commands = new HashMap<>(); + + public CrawlerController(ConsoleView view, List
articles) { + commands.put("help", new HelpCommand(view)); + commands.put("list", new ListCommand(view)); + commands.put("crawl", new CrawlCommand(view)); + commands.put("exit", new ExitCommand(view)); + } + + public void handle(String input) { + // 解析命令 → 从 Map 取 Command → 调用 execute + } +} +``` + +> **增加新命令:只需新建类,Controller 零改动!** + +--- + +## 对比:switch-case vs Command + +| 维度 | switch-case | Command模式 | +|------|-------------|-------------| +| 增加命令 | 要改 Controller | 新建一个类 | +| 多态体验 | 无 | `execute()` 多态 | +| 可测试性 | 难 | 每个 Command 单独测试 | +| 代码量 | 少 | 多,但更清晰 | + +> 🏨 **类比:酒店客房服务,前台只负责派单** + +--- + +## 5️⃣ Maven 模板与环境(5分钟) + +### 直接使用模板,不折腾配置 + +``` +my-crawler-template.zip + ↓ 解压 + IDEA打开 + ↓ 右键 pom.xml → Maven → Reload Project + ↓ 运行 App.java +``` + +### 标准目录结构 + +``` +src/main/java/com/crawler/ +├── model/Article.java +├── view/ConsoleView.java +├── command/ +│ ├── Command.java +│ ├── CrawlCommand.java +│ ├── HelpCommand.java +│ ├── ListCommand.java +│ └── ExitCommand.java +└── controller/CrawlerController.java +``` + +--- + +## 6️⃣ 代码落地(分步实现) + +### Model:Article 实体 + +```java +public class Article { + private String title; + private String url; + private String content; + // 构造器、getter/setter、toString +} +``` + +> 📦 只存放数据,没有任何输入输出代码 + +--- + +## View:ConsoleView(ANSI常量集中管理) + +```java +public class ConsoleView { + private static final String ANSI_GREEN = "\033[32m"; + private static final String ANSI_RED = "\033[31m"; + // ... 其他常量 + + public void printSuccess(String msg) { + System.out.println(ANSI_GREEN + msg + ANSI_RESET); + } + public void printError(String msg) { ... } + public void display(List
articles) { ... } +} +``` + +> ✨ **所有颜色码集中定义 → 改主题只需改一处** + +--- + +## Command 实现示例(HelpCommand) + +```java +public class HelpCommand implements Command { + private ConsoleView view; + public HelpCommand(ConsoleView v) { this.view = v; } + public String getName() { return "help"; } + public void execute(String[] args, List
articles) { + view.printInfo("Commands: crawl , list, help, exit"); + } +} +``` + +> ⚠️ 全部输出通过 `view`,绝不让 `System.out` 直接出现在这里 + +--- + +## CrawlCommand(存根,下周填坑) + +```java +public class CrawlCommand implements Command { + private ConsoleView view; + public CrawlCommand(ConsoleView v) { this.view = v; } + public String getName() { return "crawl"; } + public void execute(String[] args, List
articles) { + if (args.length < 2) { + view.printError("Usage: crawl "); + return; + } + view.printInfo("Stub: Would crawl " + args[1]); + } +} +``` + +> 🔍 **找茬点**:这里拼接字符串算是“业务逻辑”吗?留给大家用 AI 审计。 + +--- + +## ExitCommand + +```java +public class ExitCommand implements Command { + private ConsoleView view; + public ExitCommand(ConsoleView v) { this.view = v; } + public String getName() { return "exit"; } + public void execute(String[] args, List
articles) { + view.printSuccess("Bye!"); + System.exit(0); + } +} +``` + +> ✅ 所有输出都通过 View → 将来改 GUI 只需换 View 实现 + +--- + +## Controller + main 组装 + +```java +// Controller 中持有 Map +// App.java 中: +ConsoleView view = new ConsoleView(); +List
articles = new ArrayList<>(); +CrawlerController controller = new CrawlerController(view, articles); +view.printSuccess("Welcome to CLI Crawler!"); +while (true) { + controller.handle(view.readLine()); +} +``` + +> 🔁 完成交互循环 + +--- + +## 7️⃣ 架构反思:共享 List
的隐患 + +### 当前问题 + +- 所有 Command 都直接拿到 `List
` 引用 +- 任何一个命令都可以随意增、删、改列表 +- 数据完全“裸奔” + +> 🚨 就像酒店所有员工都能进保险箱 + +--- + +## 提问 + +- 如果 `CrawlCommand` 不小心把 `null` 塞进列表,`ListCommand` 会怎样? +- 如果我们要在添加文章时写日志,现在的设计能优雅实现吗? + +### 预告解决方案(W10) + +- **策略模式** + **仓库层(ArticleRepository)** +- 封装 `List`,对外只暴露 `add()`、`getAll()` 等安全接口 + +> W9 搭骨架,W10 装上盔甲 + +--- + +## 8️⃣ 实践任务(现场5分钟) + +### 必做项 + +1. 使用 Maven 模板创建项目 +2. 实现完整包结构(model/view/command/controller) +3. 实现 4 个 Command:help / list / crawl / exit +4. `list` 能展示已抓取的文章(目前存根即可) +5. 运行并测试循环 + +### 额外加分:代码找茬 + +- 检查是否仍有 `System.out` 直接调用 +- 检查 ANSI 码是否硬编码在多个地方 + +--- + +## 验收标准 + +- [x] Maven 编译通过 +- [x] Command 接口和 4 个实现在不同文件 +- [x] Controller 里没有 switch-case +- [x] 新增命令只需新建类,不改 Controller +- [x] list 能正确显示空列表 +- [x] 所有输出均通过 `ConsoleView` +- [x] ANSI 颜色码集中定义为常量 + +--- + +## 9️⃣ 课后作业 + +### 必做 + +1. **完善 Article**:增加 `author`、`publishDate` 字段 +2. **★ HistoryCommand**:记录用户输入过的所有命令(用 `List`) +3. **AI 架构审计**:将类名发给 AI,指令: + > “作为Java架构审计师,请检查我的MVC三层划分是否存在越权行为?” + +### 选做 + +- 命令别名(c 代替 crawl) +- URL 格式验证 +- 暗色主题(修改一处常量) +- 思考题:分析 `List
` 共享引用的风险(200字小结) + +--- + +## 🤖 AI 协同升级 + +### 架构审计师任务(必做) + +**步骤**: +1. 列出所有类名(不含方法实现) +2. 发给 AI +3. 指令:“检查 MVC 分层是否清晰,是否有越权行为” + +### 进阶探究(选做) + +> “假设我的 Command 接口中 execute 方法接收了一个 `List
` 参数,请分析这种设计在工程上有什么隐患,并给出重构建议。” + +--- + +## 📚 总结与过渡 + +### 本周成果 + +- ✅ 工程化包结构 +- ✅ MVC 分层清晰 +- ✅ Command 模式实现可扩展路由 +- ✅ 所有输出走 View,常量集中管理 + +### 下周预告 + +- **策略模式**:封装爬取算法 +- **仓库层(Repository)**:武装 `List
`,解决共享隐患 + +> 🚀 从“写代码”到“造系统”,踏出坚实第一步! + +--- + +## Q&A + +### 常见问题 + +| 问题 | 解答 | +|------|------| +| IDEA 不识别 pom.xml | 右键 → Maven → Reload Project | +| 中文乱码 | Settings → File Encodings → UTF-8 | +| 输出颜色乱码 | Windows 建议使用 Windows Terminal | +| 我的 System.out 被批评 | View 才是唯一输出出口 | + +--- + +## 谢谢! + +### 课件已上传,模板在课程群 + +**保持工程洁癖,下周见!** \ No newline at end of file diff --git a/w9/屏幕截图 2026-05-29 213836.png b/w9/屏幕截图 2026-05-29 213836.png new file mode 100644 index 0000000000000000000000000000000000000000..ee35d98678500c82625387043b4e385bf263636c GIT binary patch literal 131484 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

V3mpt#=KU1JBvm;~~3qBqo&T-zI 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 !2CE8lJbxOH}hcE4vZD5a4GU`&9@(4nM^ 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 VHtQ)}rBLvnviu#nA{n!Q{{vmjhZg_< literal 0 HcmV?d00001