(这是一个一般性的问题,但我用Grails标记它,因为我用它来构建应用程序。)
有一些业务(或可能是技术)要求迫使您从部署应用程序的那一刻起就假定存在(持久)域类的特定实例。例如,系统需要从一开始就存在管理/超级用户。另一个例子是,当您跟踪应用程序(服务器)的所有客户端应用程序时,您的应用程序将为自己执行特殊客户端。此外,围绕这些实例的规则可能不会适用于相同类型的其他实例。什么是面向对象的方法?特别是Grails的内置功能是否支持此功能?对于不同的具体情况,可能有不同的方法,但我想知道对于这类问题广泛接受的做法是什么。
答案 0 :(得分:1)
我在init期间使用Grails BootStrap.groovy文件,如果特殊实例尚未存在,我将创建它们。我还将在配置中设置标志,以控制我将引导多少数据。让新开发人员能够将所有需要的数据和一些样本全部加载到应用程序中非常有用。
特殊情况是生产登录的任何内容。在这种情况下,我不直接引导它们,但会将这些数据构建到生产设置中,我不想保留dev / qa / etc和生产超级用户的相同日志。很多时候,超级用户不在生产中,而是具有该角色的用户。
答案 1 :(得分:0)
您可以使用@jeffbeck建议的BootStrap.groovy
文件。这是grails时代开始的选择。您可以将其与fixture plugin
结合使用,这允许您在groovy脚本中创建复杂的数据结构。您可以在BootStrap.groovy
中使用条件非常具体地确定装载的内容。
import grails.util.Environment
import grails.plugin.fixtures.FixtureLoader
class BootStrap {
FixtureLoader fixtureLoader
def init = { servletContext ->
Environment.executeForCurrentEnvironment {
development {
fixtureLoader.load('developmentFixtures')
}
production {
fixtureLoader.load('productionFixtures')
}
}
}
}
还有其他选项可以使用Database Migration Plugin
但我们从不尝试过这个。