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