在Play 2.x子项目中,构建模块化应用程序的方式看起来很棒。
现在,深入了解细节,一些问题变得清晰:
1) Cyclical dependencies not possible (A can depend on B, but B cannot depend on A)
2) A child project cannot access a parent project
3) Routing and Assets are isolated to each sub project
在我的情况下,我想按如下方式构建一个应用程序:
Main
Modules
-> Core
-> Model
-> Common
-> View
-> Desktop
-> Mobile
-> Controller
-> admin
-> account
-> public
现在,假设管理员控制器收到移动请求,但用户尚未登录。好的,我们需要提取View > Mobile > views > login > index.scala.html
由于控制器子项目依赖于视图(反之亦然),视图将无法访问控制器路径,这意味着像@form(action = admin.routes.auth)
这样的东西将无效。
可以在每个单独的控制器子项目下废弃查看子项目和存储视图,但这看起来像是大量模板代码重复的配方。
对于基本的核心,模型,主要(资产,控制器,视图)子项目设置,一切都很好,但是当你需要支持移动和桌面界面,以及crud和前向视图时,它会变得复杂得多。
当您看到单个路线文件导致庞大的构建时间时,子项目开始看起来像圣杯。
实施是另一回事。