【问题标题】:Sharing a grails app domain plugin among multiple grails application clients and sing subset of domain classes在多个 grails 应用程序客户端之间共享一个 grails 应用程序域插件并使用域类的子集
【发布时间】:2010-11-25 11:31:47
【问题描述】:

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

这是场景:

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

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

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

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

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

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

谢谢, 阿拉姆·谢尔

【问题讨论】:

    标签: database hibernate grails grails-orm grails-plugin


    【解决方案1】:

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

    这增加了额外的复杂性,但确实有效。

    【讨论】:

    • 你能告诉我一个样本或链接吗?不过这似乎很有趣。
    • src/groovy 中的 ORM 映射域类是什么意思?你的意思是我只是设计了与我的域结构树相对应的 groovy 对象树?然后当我将此插件添加到项目时,我会从域对象扩展每个这样的类并定义约束?是你说的还是我完全脱节了?
    • 是的,完全正确。对不起 - 英语不是我的母语。而且您不必重新定义约束(尽管可以),它们也是“继承的”。 IE。如果class B extends A,Grails 将调用 B.constraints(),从而调用 A 的静态属性。
    • 关于样例,我只在单个项目中做过,不允许泄露。我只是相信它适用于插件。
    【解决方案2】:

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

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

    通常请注意,如果多个不同的应用程序同时访问同一个数据库,则存在从 Hibernate 获取锁定异常的风险。

    【讨论】:

    • 对目标应用程序表的需求可能会有所不同,因此必须为每个子应用程序更改相应的子插件。子插件依赖项也会发生不可预测的变化。并且鉴于 Grails 使用乐观锁,普通的 Grails 设施不会处理并发冲突吗?
    猜你喜欢
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2019-03-11
    相关资源
    最近更新 更多