Database 在多个grails应用程序客户端之间共享grails应用程序域插件,并使用域类的子集

Database 在多个grails应用程序客户端之间共享grails应用程序域插件,并使用域类的子集,database,hibernate,grails,gorm,grails-plugin,Database,Hibernate,Grails,Gorm,Grails Plugin,这是一个奇怪的要求,我正在考虑这是否可行。第二个问题是,这是否是一个可行的设计决策 以下是场景: 我们有一个由大约160个表组成的数据库。 我们在遗留数据库的基础上创建了一个GrailsORM插件 现在我们有了不同的应用程序(插件),他们将使用这个orm插件 每个应用程序都可以独立运行,也可以与其他应用程序组合运行 每个应用程序主要使用插件中设计的完整ORM模型的子集 为了独立运行应用程序,我只想创建一个独立的数据库,其中包含应用程序所需的表,而不是包含160个表的整个数据库。但是,由于独立应用

这是一个奇怪的要求,我正在考虑这是否可行。第二个问题是,这是否是一个可行的设计决策

以下是场景:

我们有一个由大约160个表组成的数据库。 我们在遗留数据库的基础上创建了一个GrailsORM插件

现在我们有了不同的应用程序(插件),他们将使用这个orm插件

每个应用程序都可以独立运行,也可以与其他应用程序组合运行

每个应用程序主要使用插件中设计的完整ORM模型的子集

为了独立运行应用程序,我只想创建一个独立的数据库,其中包含应用程序所需的表,而不是包含160个表的整个数据库。但是,由于独立应用程序依赖于上面定义的ORM插件,这是可能的还是不可能只有表的子集,或者我必须创建完整的数据库模式

如果需要任何进一步的细节来理解这个问题,请告诉我

谢谢,
Alam Sher

我建议将ORM插件拆分为单独的“子ORM”插件。当然,这些“子orm”插件可能依赖于其他“子orm”插件。“子orm”插件之间的分界线应由业务领域定义

然后,每个“部分”应用程序可能对其范围内所需的“子orm”插件具有依赖性。 在这种情况下,传递依赖关系解析很有价值


一般来说,请注意,如果多个不同的应用程序同时访问同一数据库,则有可能从Hibernate获得锁定异常。

您可以在
src/groovy
文件夹中声明ORM映射的域类,从而不映射插件中的任何内容,然后在最终应用程序中扩展必要的类。将使用
src
中声明的映射


这增加了额外的复杂性,但确实如此。

对目标应用程序表的需求可能会有所不同,因此必须为每个子应用程序更改相应的子插件。子插件依赖关系也会发生不可预测的变化。如果Grails使用乐观锁定,那么并发冲突不是由普通的Grails工具来处理吗?您能给我一个例子或链接吗?这看起来很有趣。你说src/groovy中的ORM映射域类是什么意思?你是说我只是设计了与我的域结构树对应的groovy对象树?然后,当我将这个插件添加到一个项目中时,我从一个域对象扩展了每个这样的类,并定义了约束条件?是你说的还是我完全不懂?是的,没错。对不起,英语不是我的母语。您不必重新定义约束(尽管可以),它们也是“继承的”。也就是说,如果
类B扩展了A
,Grails将调用B.constraints(),从而调用A的静态属性。关于示例,我仅在单个项目中进行了此操作,不允许透露。我只是相信它会为插件工作。