
本文阐述在面向领域建模的前提下,如何合理设计 java swing 应用的序列图:优先聚焦业务逻辑交互(customer、account、transaction 等核心类),而非 ui 细节;仅在必要时将 swing 组件作为边界对象引入,并通过分层拆分保持可读性与专业性。
本文阐述在面向领域建模的前提下,如何合理设计 java swing 应用的序列图:优先聚焦业务逻辑交互(customer、account、transaction 等核心类),而非 ui 细节;仅在必要时将 swing 组件作为边界对象引入,并通过分层拆分保持可读性与专业性。
在面向对象系统建模中,序列图(Sequence Diagram)的核心价值不在于“画全所有类”,而在于清晰表达特定场景下对象间的消息时序与职责协作。对于基于 Java Swing 构建的 ATM 系统,这一原则尤为关键——Swing 是 UI 实现层,而 Customer、Account、Transaction、ATM 和 Admin 才承载真正的业务语义。因此,绘制序列图应遵循“目标驱动、分层抽象”的设计思路。
✅ 推荐实践:以业务用例为中心,分层构建序列图
-
顶层序列图:聚焦领域逻辑(推荐主用)
以典型用户操作为触发点(如“客户登录并取款”),仅包含领域类与协调类,忽略 Swing 组件细节。例如:
Customer → ATM: login(accountNumber, pin) ATM → Account: validatePIN(pin) Account → Database: queryBalance(accountNumber) Account ← Database: balance ATM ← Account: validationResult Customer ← ATM: loginSuccess() ... Customer → ATM: withdraw(amount) ATM → Account: debit(amount) Account → Transaction: createWithdrawal(...) Transaction → ATM: receiptData ATM → Transaction: generateReceipt()
该图清晰呈现了身份验证、余额校验、资金扣减与凭条生成等业务流程,便于开发团队对齐逻辑、支持单元测试设计,也与数据库访问、PDF 导出等技术实现解耦。
-
可选补充:UI 交互层序列图(按需细化)
若需说明界面响应机制(如按钮点击如何触发业务流),可单独绘制一张轻量级 UI 层序列图,将 Swing 组件作为边界对象(Boundary) 引入,但避免混杂业务逻辑:
JButton[loginBtn] → LoginFrame: actionPerformed(e)
LoginFrame → ATMController: handleLogin(accountField.getText(), pinField.getPassword())
ATMController → ATM: login(...)
ATM → Customer: authenticate(...)
Customer ← ATM: success
LoginFrame ← ATMController: updateUI("Login successful")
LoginFrame → JDialog[mainMenu]: setVisible(true)⚠️ 注意事项:
- 绝不将 Swing 组件(如 JFrame、JPanel)与领域类(如 Account)混在同一张图中进行复杂交互建模——这会导致关注点混乱、维护成本陡增;
- 若使用 MVC 或类似分层架构,建议将 Controller(如 ATMController)作为独立生命线,承担 UI 与领域之间的适配职责;
- 对于数据库或 PDF 生成等外部依赖,统一用 > 或 > 标注(如 > MySQLConnection),体现其非核心但必要的协作角色;
- 每张序列图应有明确标题与用例标识,例如:“SD-01:客户成功取款流程(领域层)”、“SD-02:登录界面事件处理(UI 层)”。
? 总结:序列图不是代码快照,而是沟通契约
- 领域层序列图是给业务分析师、后端开发者和测试工程师看的——它回答“系统应该做什么”;
- UI 层序列图是给前端开发者和 UI 设计师看的——它回答“界面如何触发和反馈”;
- 二者通过清晰的接口约定(如 ATM.login() 方法签名)松耦合连接,而非强行合并。
这种分层建模方式,既尊重了 Swing 作为 UI 工具的技术定位,又保障了业务逻辑的可移植性——未来若将系统重构为 Web 应用或 CLI 工具,领域层序列图几乎无需修改,极大提升架构演进效率。
立即学习“Java免费学习笔记(深入)”;











