4

语境

我正在处理一个大型的、嵌套的、结构化的文档,它以场景图的形式显示在屏幕上。用户需要有能力修改这个文档——我目前正在使用功能拉链来实现。

现在,目前,我正在每次更改后重新绘制整个文档。但是,当使用场景图时,我只需要修改改变的部分。

然而(不打算开始一场激烈的战争),我越来越开始觉得这个问题从根本上是一个关于状态的问题,而不是关于函数的问题。尤其:

  • 用户操作(上、下、左、右、插入字符、删除字符)是关于操作状态,而不是进行计算

  • 文档一次只有一份,只被一个线程点击,分享没有收获

当前方法

我使用功能拉链来存储文档并提供状态操作功能。然后,我不断地重画。

我怀疑可能是正确的解决方案:

将所有内容存储在一个场景图中,沟函数拉链,修改后直接修改场景图变化的部分。

技术问题:

其他人处理过这个吗?这个问题有技术上的正式名称吗?(相当于“餐饮哲学家”的并发?)这个问题有没有完善的解决方案?

免责声明

这个问题有点软。我无法粘贴最小损坏案例的代码示例,因为

* my code is around 5K LOC
* it's not for me to share publicly

但是,这是一个真正的技术解决方案,我希望其他人可以分享他们的答案

谢谢!

4

1 回答 1

3

你的基本过程听起来不错。它的当前形式很灵活,因为您可以选择让单独的线程更新树,并且您可以相当简单地实现“撤消”按钮。如果在每次修改后您都返回新树和更改部分的路径,那么您可以只更新显示中更改的部分。很多人在区分“模型”和“视图”方面比我有更强烈的意见,尽管我怀疑至少他们的一些智慧适用于此。

于 2012-06-20T21:24:24.020 回答