gpt4 book ai didi

grails - 在 Grails 中对域实例进行版本控制以供批准

转载 作者:行者123 更新时间:2023-12-03 23:58:13 25 4
gpt4 key购买 nike

我正在寻找扩展 Grails CRUD 生成功能的最佳方法。它应该是一个 Grails 插件,它为以下功能提供额外的生成器:

  • 应保存扩展域实例的任何更改(作为版本
    其中)历史
  • 一个实例只能激活一个版本
  • 用户应该能够激活实例的一个版本(
    当前事件的实例应该被停用),它没有被创建
    由他(4眼原则)
  • 有差异 View 很不错

  • 对 Grails 开箱即用脚本的干预应该尽可能小。
    到目前为止,我确定了 3 种实现设计策略:
  • 具有相同架构的镜像表,其中包含版本( double
    域/表的计数)。激活的版本将被复制
    到 native 域,反之亦然。
  • 在领域类中使用鉴别器。一些新的列将被添加到域中(如状态 [active,notActive]、lastUpdatedBy、
    最后更新日期…)
  • (反)使用 BLOB 将实例序列化到特殊域(例如,作为 JSON 的 domain.properties)

  • 任何解决方案都有优点和缺点。实现它的最佳方法是什么?也许有更简单的方法。

    最佳答案

    我一直在 Grails 中开发一个系统,该系统充分利用了版本概念(如您在上面提到的)。我的方法是您问题中列出的第二个方法。

    我创建了两个字段: internalVersion e disabled。每个需要是 Versionable 的类都必须实现一个名为 Versionable 的接口(interface)。

    我将在这里尝试解释使用版本功能所必需的场景之一(请原谅我的英语)。

    使用此概念的系统是一个商业系统,其中有一个名为 Quote 的类。

    每个 Quote 可以有一个或多个版本,其中只有最后一个版本有效。每个报价及其版本都是根据与特定客户的协商生成的。这样,客户向我们询问报价,如果由于某种原因他不喜欢价格(例如),我们可以生成带有一些折扣的新版本。每个报价都有一个唯一的代码,后面跟着当前版本,例如:QT-000022/0(第一版),QT-000022/1(第二版)。

    为了生成一个新版本,我使用了一种克隆当前对象的方法(使用一种完整且深度的另存为)。我将所有内容(属性和集合)复制到一个新对象。

    clone 方法标识该类实现了 Versionable 接口(interface)并执行以下操作:

    oldQuote.disabled = true
    newQuote.internalVersion = oldQuote.internalVersion + 1

    这样可以确保只启用一个版本。

    我希望你能理解我的方法。

    关于grails - 在 Grails 中对域实例进行版本控制以供批准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21092426/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com