通过阅读Grails中的docs,我发现以下语句:



我的问题是:太深了?

继承链中的5个扩展是否会使Grails哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣,哭泣?,10?,20?...。

最佳答案

到底有多深?是一个相当主观的问题。但是,当您考虑每个子类的表继承在数据库级别发生的情况时,有可能做出有根据的猜测。假设您具有以下域类:

class Employee {
    String firstName
    String lastName

    static constraints = {
    }

    static mapping = {
        tablePerHierarchy false
    }

}

class Supervisor extends Employee {
    String office

    static constraints = {
    }
}

您将得到两个表:EMPLOYEESUPERVISOREMPLOYEE表将包含列idfirst_namelast_name。但是请注意,SUPERVISOR表仅包含idoffice列。

这意味着,要检索Supervisor,GORM必须将两个表连接起来才能填充继承的属性。
SELECT EMPLOYEE.ID, FIRST_NAME, LAST_NAME, OFFICE
FROM   SUPERVISOR INNER JOIN EMPLOYEE
       ON SUPERVISOR.ID = EMPLOYEE.ID

这些连接有可能导致性能降低。可以想象,10或20个继承级别将是灾难性的。但是,有几个表(特别是如果表很小)可能会没问题。

此外,深度继承层次结构表明域模型体系结构可能存在问题(例如,考虑使用Traits)。

您可以在我的文章here中了解有关这两种继承形式的更多信息。

关于grails - Grails中多少个域类继承太多?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34958400/

10-11 22:26
查看更多