结论先说:**有较高概率存在“层间越权”风险**,主要在 `command` 与 `controller` 的职责重叠,以及 `service` 层缺失导致的职责下沉。 **审计结论** - `com.example.datacollect.command.*`:在 CLI 场景里常同时承担输入解析+流程控制,若直接操作 `Article`、爬虫逻辑、历史存储,即越权。 - `com.example.datacollect.controller.CrawlerController`:若内含抓取实现、数据持久化、格式化输出,则越权到 Service/Repository/View。 - `com.example.datacollect.view.ConsoleView`:若只做 `println` 展示是合理的;若反向调用 `model/repository` 获取数据,也越权。 - `com.example.datacollect.model.Article`:应为实体/领域对象;若包含 I/O、网络抓取、控制台交互,即越权。 - `com.example.datacollect.Main`:应只做装配与启动;若编排大量业务分支或直接执行业务细节,也属于越权。 **你这套结构的核心问题** - 缺少 `service` 层,业务逻辑会被迫塞进 `command` 或 `controller`。 - `Command` 家族与 `CrawlerController` 容易“双控制器化”,导致边界模糊。 - CLI 项目里 `view` 常被侵占(`command/controller` 到处输出文本)。 **建议的标准职责边界** - `Main`:依赖装配、路由启动。 - `command.*`:仅命令解析与调用入口(不写业务)。 - `controller`:接收命令请求、调用 service、返回结果。 - `service`(建议新增):抓取、历史、列表等业务规则。 - `model.Article`:纯数据与少量领域约束。 - `view.ConsoleView`:统一输出格式与交互提示。 **越权快速自检(命中即整改)** - `command` 中出现网络请求/文件读写/SQL/复杂业务分支。 - `controller` 中出现 HTML 解析、持久化细节、`System.out.println` 大量格式化。 - `Article` 中出现 `save/load/crawl/print` 等基础设施或展示方法。 - `ConsoleView` 中直接访问仓储或执行业务计算。