是否可以在其他 Rails 引擎中嵌入(嵌套)Rails 引擎?
我正在开发一个 Rails 3.1 应用程序,我想将它分成几个不同的部分,并将每个部分变成一个 Rails 引擎。但是,我也希望能够将整个应用程序变成一个 Rails 引擎。
是否可以在其他 Rails 引擎中嵌入(嵌套)Rails 引擎?
我正在开发一个 Rails 3.1 应用程序,我想将它分成几个不同的部分,并将每个部分变成一个 Rails 引擎。但是,我也希望能够将整个应用程序变成一个 Rails 引擎。
想想您从嵌套引擎中获得了什么好处。嵌套意味着耦合,如果你想提高可维护性和可测试性,你应该减少这种耦合。我认为理想的引擎应该能够轻松独立运行 - 这就是您在目录中dummy
创建应用程序的原因。test
当然,您可以在主应用程序中保持嵌套或保留常见的东西,但您会发现随着代码库的增长,使用紧密耦合的依赖项来维护测试变得更加困难。
作为一种解决方案,我会尝试组合。将引擎目录彼此相邻但使用嵌套模块:
engines/foo_project - namespaced FooProject::*
engines/foo_project_user - namespaced FooProjectUser::* or FooProject::User::*
如果有什么FooProject::User
需要,FooProject
那么理想情况下它应该被提取到另一个引擎中,比如FooProject::Layout
. 在另一个方向,主应用程序应该将User
内容连接到FooProject
. 在主应用程序级别添加集成测试,你就会得到 ordnung。