我想要实现的是在持久存储(数据库)上有一个持久的“可撤消”更改列表。
该体系结构使用域对象的存储库和事务的工作单元以及最终部分(撤消)我想到使用命令模式。但是,对我来说,如何使执行的命令持久化似乎没有好的解决方案。
基本上,存储库添加/更新/删除有3个写操作,并且在命令模式下我需要在执行命令之前存储状态。例如:我必须在删除之前存储域对象(实体),这样一旦在命令上调用undo,我就可以恢复它。 这里最大的问题是如何以一种简洁的方式存储前状态!
也许你们中的某个人遇到了同样的问题,在我看来并不常见。
谢谢, 克里斯
答案 0 :(得分:2)
很难给出明确的建议,但这里有几个指针 - 0xEB67ADB1,0xF97ACE64。开个玩笑。
很大程度上取决于你的ORM。您正在使用的框架可以使其更难或更容易。是否需要您调用工厂方法来创建新实体?或者可以接受PO(J | C)O(Plain Old Java / C#/ C ++ Object)。如果您需要在修改之前保存memento的记录,这会有所不同。
是否需要在撤消/重做操作之间保留对象的ID?如果保存记录的状态然后将其删除并插入,则其ID是自动增量的主键,插入后会有所不同。可能需要打开IDENTITY_INSERT
(Sql Server,我相信在其他数据库和ORM中都有等价物。)
外键限制是什么?可能存在操作顺序很重要的情况。
我会看到持久化模型对象或它的一些轻量级表示 - 无论是DTO还是其他一些序列化形式。
答案 1 :(得分:0)
我遇到的不同方法是:
答案 2 :(得分:0)