【问题标题】:Is there a design pattern for this...?是否有这种设计模式......?
【发布时间】:2011-09-02 17:21:41
【问题描述】:

当用户在数据网格中选择一条记录时,我会启动一个包含更详细信息的弹出窗口。用户可以在此窗口中对记录进行更改,但不必保存它们。例如,他们可以单击 X 关闭窗口。

不幸的是,我很愚蠢,每当用户进行更改时,我都会直接更新对象。

当用户确认他们想要保存时,是否有复制对象然后将更改映射到它的模式?

谢谢!

【问题讨论】:

    标签: actionscript-3 apache-flex flex3


    【解决方案1】:

    我不会使用复制和合并。为什么不只在用户明确想要更新/保存时才更新对象?让 UI 成为 UI,并在需要时立即从中浓缩相关信息。 如果您想要临时编辑之类的东西,另一种可能适用的方法是对每个原子更新使用命令,其中每个命令都有一个反向 - 撤消 - 命令。如果您将这些保存在历史记录中,则可以返回到初始状态。

    【讨论】:

    • 在我知道用户何时明确想要更新/保存之前,我应该将编辑内容存储在哪里?
    • 我正要说类似的话,使用命令模式和 momento 模式。 momento 保存状态,然后可以回滚(撤消)。
    • @fumeng:我猜你的意思是命令的第二种方法?我会使用历史记录,它基本上是已执行命令的列表。 UI 中的操作会导致将命令添加到历史记录并执行它们。因此,您需要一种将任何可能的编辑包装到通用界面中的方法。有关示例,请参阅wikipedia。所以有相当多的开销。
    • 嗯,我可能会坚持使用您首先解释的更简单的解决方案;仅在用户单击“保存”时更新对象。此时,转到我的每个组件并获取正确更新对象所需的值。我意识到,一旦用户与对象交互就将值分配给对象还为时过早,而且完全是错误的。
    • 我意识到我不需要撤消功能。我需要做的就是要么保留用户所做的所有编辑,要么全部忘记。所以我会放弃 Command 和 Memento 模式,因为太多了,坚持下去。感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多