Browse Source

w9-202401070104-张思渊

main
zhangsiyuan 2 months ago
parent
commit
8e0fed6b79
  1. 22
      w9/思考题回答.txt

22
w9/思考题回答.txt

@ -0,0 +1,22 @@
作为Java架构审计师,请检查我的MVC三层划分是否存在越权行为?
一、结论
当前MVC三层架构存在多层级越权行为,核心职责边界混乱,违反MVC“Controller统一协调、Model纯数据封装、View仅渲染、Command无状态”核心原则,存在数据安全、扩展性及维护性风险,需立即重构。
二、核心越权问题
1. Command层越权访问Model
Command接口直接接收`List<Article>`并持有引用,可随意修改数据,Controller丧失数据操作唯一控制权。
2. Command层越权访问View
Command直接持有View引用并调用渲染方法,绕过Controller协调,破坏分层职责。
3. View层违规持有Model引用
View直接持有`List<Article>`引用,存在数据篡改风险,仅应读取Model数据而非持有集合。
4. Command层违规持有状态数据
HistoryCommand自行管理历史记录状态,Command应无状态,状态需由Controller统一管理。
思考题:List<Article> 共享引用的风险分析
List<Article> 在项目中被多个组件共享引用,存在以下风险:
1. 并发修改异常 :多线程环境下同时读写可能导致 ConcurrentModificationException 。
2. 数据一致性问题 :任何持有引用的组件都可以直接修改列表内容,难以追踪数据变更来源。
3. 内存泄漏风险 :如果某个组件长期持有列表引用且不释放,可能导致内存无法回收。
4. 封装性破坏 :违反封装原则,外部可以绕过控制器直接操作数据模型。
5. 线程安全问题 : ArrayList 本身不是线程安全的,并发访问会导致数据错乱。
优化建议 :使用线程安全的集合(如 CopyOnWriteArrayList ),或在 Controller 层进行访问控制,提供专门的数据操作接口,避免直接暴露集合引用。
Loading…
Cancel
Save