【问题标题】:Resolving conflicts between automated updates and manual overrides解决自动更新和手动覆盖之间的冲突
【发布时间】:2012-08-28 09:47:55
【问题描述】:

这是一个有点复杂、抽象的问题,如果不够具体,请见谅。

我多次遇到过特定类型的问题:一方面,数据源用于定期以自动化方式更新某个数据结构,但另一方面,利益相关者希望能够手动覆盖自动输入。

示例:

您有一个产品列表,该列表通过使用外部数据源(产品数据库等)的一些自动化脚本保持最新(标题、描述等)。

假设您的数据源中有一个烤面包机“Freshtoast XYZ 300”,如果它的名称更改为“FreshToast!XYZ-300”,您希望将该更新传播到您自己的(不同结构的)产品模型中。

同时,如果同事不喜欢“Freshtoast XYZ 300”这个名称并想将其更改为“Toaster XYZ 300 by Freshtoast”(手动),您不想覆盖该更改自动(他会生气),但您也不想简单地忽略更新的名称,因为如果同事知道更改,他会将名称调整为“FreshToast 的 Toaster XYZ-300!”。


什么是“考虑”更新数据源的最佳方法——即使是被覆盖的数据——同时仍然允许手动覆盖?

PS:我主要使用 Ruby / Rails,但我想这个问题很笼统。此外,需要明确的是,自动更新是规则,而手动覆盖是这种情况下的例外。因此,假设每天更新 200,000 个产品,其中只有 20 个具有手动覆盖的标题。因此,例如,不必批准每一次更新。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    什么都没有……

    不干涉的方法:向产品表中添加一个字符串列,其中包含用户触摸列的序列化列表。每当用户触摸 products 表中的列时,将其放入序列化列表中。当自动更新程序点击该记录时,它会检查列表中应该忽略的列。

    手忙脚乱的微型管理器方法:使用版本控制库(例如 vestal_versions gem)并将 user_id 列添加到产品表中。每当用户触摸的记录自动更新时,向他们发送通知并允许他们查看之前/之后他们可以批准或拒绝。

    【讨论】:

    • 我同意两种最直观的解决方案是选择性地“阻止”自动更新,或者具有类似于 Git 等版本控制系统的复杂“类似合并”的过程。我不喜欢什么关于前者是它不够透明(有时我可能不想忽略自动更新);我不喜欢后者的是它可能需要相当复杂的前端和后端更改,并且看起来有点矫枉过正。
    • 诀窍是找到合适的平衡点。您不想让它过于复杂,但用户应该对他们的控制水平感到满意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    相关资源
    最近更新 更多