272
社区成员




其实我们一直以来写作业都是先建模再开发,只不过之前的作业没有强制要求UML。
说实话,刚开始看到“正向建模”这个词,心里是有点犯嘀咕的。以前写代码,都是需求看明白了,在脑子里或者草稿纸上随便画画,就有个大概的轮廓,然后直接开干。现在非要用UML这种标准化的语言先画出类图、状态图、顺序图,感觉像是被上了个“紧箍咒”,有点束手束脚。
但实际走一遍上图这个流程,才发现“真香”。
这个流程的核心价值在于,它将大量的设计思考前置,通过UML这一通用语言,在编码前暴露潜在的结构性问题,从而有效降低了后期重构的风险和成本。
本次作业的架构设计,以LibrarySystem
为核心,构建了一个职责清晰、高内聚、低耦合的系统。
LibrarySystem
:该类是整个系统的入口和调度中心。它对MainClass
屏蔽了内部复杂的子系统交互,负责接收并解析指令。其内部通过一系列私有handle
和process
方法,将具体的业务逻辑委托给相应的领域对象处理。同时,它也作为数据中心,统一管理系统中所有的核心实体集合,如allBookCopies
、allUsers
等。BookCopy
:代表了单本图书的完整生命周期。它不仅包含ID、ISBN等静态属性,还封装了其位置状态currentLocation
、移动历史movementHistory
以及状态判断(如isOverdue
, isOnAnyShelf
)等核心业务逻辑。这使得关于“书”的状态判断和行为完全内聚于BookCopy
自身。User
:作为用户的领域模型,它管理了用户的信用分、借阅记录borrowedBooks
、当前阅读和预约状态activeReservation
。所有与用户资格相关的判断(如canBorrow
, canOrder
)都由User
类自身负责,实现了业务逻辑的闭环。Reservation
:将“预约”这一复杂的业务流程抽象为独立的领域对象,是一个关键的设计决策。Reservation
类通过ReservationStatus
枚举管理其内部状态(待分配、待取书、已完成、已过期),清晰地定义了预约的整个生命周期。这种设计将复杂的预约逻辑从LibrarySystem
和User
中剥离,极大地提高了模块的可维护性。MovementLog
, BorrowingRecord
:作为值对象,用于封装和传递特定的数据集合,使代码意图更清晰,也便于数据的管理和追踪。总而言之,整个代码通过LibrarySystem
的统一协调和各个领域对象的专职负责,实现了控制逻辑与业务逻辑的分离,保证了系统的可扩展性和可维护性。
在本次正向建模过程中,我尝试将大语言模型(主要是Gemini)作为辅助工具,其体验和效果远超预期。为了高效地利用其能力,我总结了以下引导策略:
BookCopy
, User
等核心类后,再针对某个具体类的复杂行为进行深入探讨,例如:“请为Reservation
这个业务流程设计一个状态机,包含哪些状态,以及状态转换的触发事件是什么。”LibrarySystem
中处理了过多的预约逻辑,耦合较重。请重构设计,将预约抽象为一个独立的Reservation
类,并定义其状态和行为。”通过这种迭代式的对话,可以逐步将模型的设计方案优化至满足要求的水平。PlantUML
代码。这极大地减少了手动绘制和调整UML图的工作量,使我能更专注于设计本身。我的体验是,大模型是强大的“设计放大器”和“知识伙伴”,它能加速设计过程、提供多样化的解决方案,但最终的架构决策权和质量守门职责,仍需由开发者自身承担。
四个单元的训练,让我的架构设计思维经历了一次完整的、从点到面的演进:
synchronized
等同步机制保证共享资源的线程安全,实现线程间的有效协作与解耦。0
,多个+
-
,叠括号)的随机数据,并与外部标准库(如sympy
)对拍,验证程序输出的正确性。TimableOutput
)来定位和调试并发bug。Junit
进行单元测试,确保每个方法严格遵循其requires
和ensures
子句。另一方面,在集成测试中,针对规格的复杂部分和性能瓶颈设计数据,验证实现的鲁棒性。总的来说,OO是目前上过的所有课之中,最能直观感受到很有用的。不是诋毁别的课,只是感觉上完OO确实跟一个学期前不一样了,至少是自己能感受到能力在提升。
在技术能力层面,我系统地掌握了面向对象编程范式、并发设计、规格化思想和UML建模方法,并熟练运用了相关的开发与测试工具,构建了相对完整的Java工程技术栈。
在思维模式层面,我完成了从“代码实现者”到“系统设计者”的初步转变。不再只着眼于功能的实现,而是开始从可维护性、可扩展性、健壮性等维度去思考和评估架构的优劣。“高内聚、低耦合”等设计原则,也从抽象概念真正融入到实践决策中。
更重要的是,这门课程培养了我一套解决复杂问题的系统化方法论:面对未知问题,懂得如何去分解、抽象、建模,并且在高压之下还能成功实现它。
差不多是四个月的旅途,到这里先画上逗号吧。单论成绩并没有多好,当然本来就不该这么狭隘,我确确实实学到了很多东西。最后感恩课程组和各位助教老师,祝未来越来越好。