1 changed files with 22 additions and 0 deletions
@ -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…
Reference in new issue