【问题标题】:Which option is better to extend a feature 1) add a property or 2) create a new table?哪个选项更好地扩展功能 1)添加属性或 2)创建新表?
【发布时间】:2016-11-23 08:14:56
【问题描述】:

假设我有一个 Cat 域,如下所示。

  class Cat{

     String name
     Integer age

    }

现在我想添加一个新功能,为猫分配标签。

现在我看到了实现这一目标的两种选择。

选项 1

向 Cat 域添加属性

class Cat{

 String name
 Integer age
 String tag

}

选项 2

创建一个新表

class CatTagAssignment{

 Cat cat
 String tag

 static mapping = {

        id composite: ['cat', 'tag']

    }

}

我想了解哪种方法更好,或者当我想添加新功能时应该更喜欢哪种方法?如果您能提供两种方法的优缺点以及一种方法是否总是优于另一种方法,我将不胜感激。我感谢您的帮助!谢谢!

【问题讨论】:

    标签: grails domain-model


    【解决方案1】:

    制作一个标签模型(定义您的标签)和一个 cattag 模型(将标签与猫相关联)。如果您希望能够“标记”其他内容,它是新模型的简单连接表。

    更喜欢哪个?忽略代码和框架,想想你在建模什么。

    标签作为一个单独的实体更容易重复使用,猫仍然是猫(标签真的是猫的属性吗?)。好的模型应该可以跨数据库、框架、语言迁移。

    【讨论】:

      【解决方案2】:

      使用你能得到的最简单的模型。不要仅仅为了“面向对象”而使用额外的表,除非没有其他选择。

      我会选择 1),因为它是加载对象的最快方式,尽管标签查找可能会有点棘手(like 查询)

      【讨论】:

      • 我注意到的一个缺点是,将来向表中添加越来越多的列会使表的大小变得非常大。在这种情况下我们可以选择选项 2 吗?谢谢!
      猜你喜欢
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 2022-10-14
      • 2018-01-15
      • 2018-04-20
      • 2023-03-08
      相关资源
      最近更新 更多