You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
2.0 KiB
28 lines
2.0 KiB
结论先说:**有较高概率存在“层间越权”风险**,主要在 `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` 中直接访问仓储或执行业务计算。
|
|
|
|
|