Architecture 设计/算法:2';肮脏';每个文件的状态

Architecture 设计/算法:2';肮脏';每个文件的状态,architecture,Architecture,遇到具有挑战性的情况,请帮助设计决策 我有一个处理“文档”的应用程序,它实际上是一些数据的集合,而不是那种重要的数据 数据(文档)通过应用程序进行管理,并保持标准标记为脏/请求保存/保存/另存为工作流 除了主要的应用程序功能外,还开发了一些插件,用于编辑过程中的数据分析。假设这些插件的某些设置可能需要持久数据存储 此数据存储是附加到decoment实例的内存中字典,稍后将其序列化到文档文件,并在文档加载时反序列化 因此,当应用程序启动并打开文档时,会从文件中读取额外的数据。然后,在浏览文档时,可

遇到具有挑战性的情况,请帮助设计决策

我有一个处理“文档”的应用程序,它实际上是一些数据的集合,而不是那种重要的数据

数据(文档)通过应用程序进行管理,并保持标准标记为脏/请求保存/保存/另存为工作流

除了主要的应用程序功能外,还开发了一些插件,用于编辑过程中的数据分析。假设这些插件的某些设置可能需要持久数据存储

此数据存储是附加到decoment实例的内存中字典,稍后将其序列化到文档文件,并在文档加载时反序列化

因此,当应用程序启动并打开文档时,会从文件中读取额外的数据。然后,在浏览文档时,可以运行一些基于插件的报告。该插件将请求设置,并将它们存储在文档“额外数据”中。然后,这些额外的数据应该保存到文档文件中

这给了我们两个脏状态:文档状态(如果在会话期间更改了)和额外的数据脏状态

现在,如果文档没有被更改,但是额外的数据被更改了,我假设用户可以保存额外的数据,并以静默方式保存文档

如果文档被更改,并且用户保存了它,那么额外的数据将与文档一起保存,这很好

但是,如果两者都是脏的,并且用户说“不,我不喜欢保存文档更改”,那么最好的解决方案是什么呢。现在我通知他们额外的数据(插件设置)也会丢失。 保存数据本身(并提供单独的选项“仅保存设置”)是可能的,但有点棘手


您的意见-哪种方式最符合逻辑?

如果您确实希望能够将额外数据与文档分开保存,则可以执行以下两种操作之一:

  • 如果可以确定最大额外数据大小,并且该大小相对较小,则可以定义文档文件的标题部分,在该部分中仅保存额外数据
  • 将额外数据保存到单独的文件中,并链接两个文件(通过某些操作系统机制或应用程序中的逻辑)

  • 但是,我要提醒用户不要在没有文档的情况下保存额外的数据。如果两个用户分别更改额外的数据和文档怎么办?如果它们都单独保存,那么结果对两个用户来说都是不可预测的吗?

    如果您确实希望能够将额外数据与文档分开保存,那么您可以执行以下两种操作之一:

  • 如果可以确定最大额外数据大小,并且该大小相对较小,则可以定义文档文件的标题部分,在该部分中仅保存额外数据
  • 将额外数据保存到单独的文件中,并链接两个文件(通过某些操作系统机制或应用程序中的逻辑)

  • 但是,我要提醒用户不要在没有文档的情况下保存额外的数据。如果两个用户分别更改额外的数据和文档怎么办?如果它们都单独保存,那么结果对两个用户来说都是不可预测的吗?

    我认为应用程序的行为一致性很重要-要么总是以静默方式保存插件数据,要么总是请求是否保存插件数据。我认为,根据文档内容是否已更改而更改插件保存的行为可能会导致用户行为混乱

    在不了解您的应用程序的情况下,我觉得如果在插件内容已更改但文档未更改时以静默方式保存插件数据是有意义的,那么在用户更改文档内容但未保存时以静默方式保存插件数据可能是有意义的。然而,我也觉得这种行为对许多应用程序来说不太可能有意义——一句“不,我不想保存”可能不会导致对某些已更改的内容进行隐藏保存

    因此,我建议以下解决方案,对用户来说既一致又清晰:

  • 如示例中所示维护两个标志,但从用户的角度将两个脏标志视为一个标志-当任一标志脏时,弹出“保存更改?”对话框
  • 使用标志中的信息确定对话框的文本-例如“插件设置自上次保存以来已更改”或“插件设置和文档已更改”等。这样,用户总是知道为什么会出现保存对话框,并且始终只有一个对话框
  • 为了获得额外的积分,您甚至可以具体说明哪些插件设置已更改


    我也同意Miilimetric的观点,即允许部分保存可能会对多个用户产生不可预测的行为-如果设置会影响文档的处理方式,则从保存的角度来看,它们可能应该被视为文档内容的一部分

    我认为应用程序的行为一致性很重要——要么总是以静默方式保存插件数据,要么总是请求是否保存插件数据。我认为,根据文档内容是否已更改而更改插件保存的行为可能会导致用户行为混乱

    在不了解您的应用程序的情况下,我觉得如果在插件内容已更改但文档未更改时以静默方式保存插件数据是有意义的,那么在用户更改文档内容但未保存时以静默方式保存插件数据可能是有意义的。然而,我也觉得这种行为对许多应用程序来说不太可能有意义——一句“不,我不想保存”可能不会导致隐藏的错误