1.背景介绍
事务处理是指对数据进行一组操作,这些操作要么全部成功,要么全部失败,以确保数据的一致性和完整性。软件的事务管理主要实现方案主要涉及以下几个方面:
(1)数据一致性:在CAD软件中,数据一致性是指确保所有操作都遵循一定的顺序,以避免意外的后果。例如,在编辑图形时,确保先删除图形元素,然后再创建新的图形元素。
(2)事务边界:在CAD软件中,事务边界是指将一系列相关操作组合成一个完整的事务。事务边界可以确保一组操作要么全部成功,要么全部失败。例如,在绘制一个建筑平面图时,将所有操作组合成一个事务,以确保整个绘制过程的一致性。
(3)错误恢复:CAD软件需要具备错误恢复能力,以便在发生意外故障或操作失败时,能够将数据恢复到一致的状态。错误恢复通常涉及到日志记录、事务回滚等机制。
在图形平台的设计与开发中,撤销(Undo)和重做(Redo)机制是至关重要的功能。它们让用户能够回退到先前的操作状态,或者重新执行之前撤销的操作,提供了更好的用户体验和操作灵活性,这一功能是由事务管理机制来实现的。我们将深入探讨撤销与重做机制的原理、实现方法以及其应用场景。
2.技术方案选择
- 方案1
commit提交产生的修改对象序列化流保存在redo文件。
方案2
commit提交产生的修改对象序列化流保存在内存中。
由于采用内存存储,序列化和反序列化性能,方案1的劣于方案2。方案2稳定可靠性差。程序崩溃,导致文件修改无法恢复数据丢失,无法实现设计目标2.方案1的每次提交保存在文件中,程序崩溃后,数据可以恢复。保存二进制流会占用大量内存,影响程序性能。经过比较,决定采用方案1.
3.技术方案
- 使用对象状态跟踪管理器来跟踪上次提交以来element修改状态。
- 使用OM序列化机制生成所有修改对象的序列化流。
- 将序列化流保存在redo文件中及对象修改状态(删除、修改、新增)。
- Redo时读入redo文件的序列化流,使用OM反序列化机制生成Element对象,根据保存的修改状态,更新对象管理器ElementManager中的对象。
- Undo时读入redo文件的序列化流,使用OM反序列化机制生成Element对象,根据保存的修改状态,更新ElementManager中的对象。
- 每个事务提交生成一个redo文件。
- 设计TransactionEvent事务事件机制,事务commit时,发出PreCommint等事件,应用做对应处理。
- 设计RedoUndoEvent事件,回退和重做时发出对应事件,应用做对应处理。
4.设计实现
4.1设计类图
4.2 接口设计
5.使用规则
- 调整业务逻辑,减少事务创建。
- 避免事务的滥用,创建新的事务前,请仔细三思。
- 在交互模块调用事务,避免在在业务逻辑和数据模块使用。
君方智能设计平台介绍链接:
ShipMaker船舶协同设计软件介绍-CSDN博客