代码之家  ›  专栏  ›  技术社区  ›  Meni Lubetkin

向域类添加用户定义属性

  •  3
  • Meni Lubetkin  · 技术社区  · 15 年前

    我有一个要求,允许用户在其中一个系统实体中定义一些自定义字段。您有什么建议/模式/插件可以帮助我将这个功能添加到我的应用程序中吗?

    谢谢,

    梅尼

    2 回复  |  直到 15 年前
        1
  •  6
  •   Burt Beckwith    15 年前

    您可以向域类添加映射属性,并在其中存储任意数据。但这是相当有限的。它将生成一个带有varchar(255)键和值的表,因此您需要自己管理任何类型转换,例如。

    class Thing {
       String name
       Map extraProperties = [:]
    }
    
    int age = 123
    def thing = new Thing(name: 'whatever')
    thing.extraProperties.age = age.toString()
    thing.save()
    
    ...
    
    def thing = Thing.get(thingId)
    int age = thing.extraProperties.age.toInteger()
    

    见“5.2.4集、列表和地图”一节 http://grails.org/doc/latest/ 对于简短的在线文档。

        2
  •  0
  •   duffymo    15 年前

    听起来您希望您的应用程序是一个无限可调扳手,用户可以随意修改。公平吗?

    我认为这不可能也不可取。考虑一下在Grails中向现有域对象添加属性时会发生什么。属性被添加到ORM映射中,这意味着必须修改表。用户界面添加了另一个文本框用于数据输入;列表页在其表中添加了另一列。

    添加属性时会发生很多事情。如何同时管理多个用户修改应用程序?当一个用户修改一个表而另一个用户访问旧版本时会发生什么?

    你要求太多了。我认为这不是合理的要求。Grails的优势在于基于Web的CRUD应用程序的快速发展。我不认为这包括用户在运行时的修改。

    推荐文章