如何处理Play子项目之间的依赖关系?

时间:2013-06-28 16:48:25

标签: scala dependency-injection sbt playframework-2.1

在创建一个Play项目的大混乱之后,我认为将它分解为子项目可能是一个好主意,以便依赖项,我可以编译项目的一部分等。

不幸的是,我发现子项目对整个项目有轻微的依赖性。耦合足够小,我不以为耻,但SBT不会让我声明循环依赖。 (而且我认为这是件好事。)

这是一个例子。我有一个users子项目,它定义了几个用于处理用户的模型。您可能还希望与用户打交道的基本视图:login,logout,changePassword,updateSettings等。问题是,这些都取决于我的主模板,因此它们看起来像网站的其余部分。所以我需要一些方法让用户子项目知道它应该嵌入其视图的主模板是什么。

作为另一个例子,大多数网站都有一个“默认”页面,当用户尝试访问他们无权访问的信息时,或者在他们注销后等时,他们会向用户发送这些页面。子项目需要知道这是什么页面是这样他们可以根据需要重定向到默认页面。但是默认页面是在主项目中定义的,子项目不能依赖它。

我开始尝试通过在主项目中使用我的Global.onStart方法来解决此问题,以便将设置“注入”到子项目中。例如,我创建了一个var来保存默认页面,然后在应用程序启动时将controllers.users.App.defaultPage设置为正确的值。但后来我意识到每个子项目都需要一些钩子来告诉它它如何适合主项目,并试图手动跟踪所有这些只是在寻找麻烦。

有没有人想出一个处理这个问题的好方法?每个子项目是否应具有主项目可以修改的默认Configuration?有没有办法让每个子项目声明它需要什么配置,以便主项目无法提供它会触发错误?我是否应该为我的代码的耦合感到羞耻,然后回到绘图板?

谢谢!

1 个答案:

答案 0 :(得分:1)

经过更多搜索,我发现了这篇博客文章。我要试一试,看看它是如何工作的:

http://eng.42go.com/play-framework-dependency-injection-guice/

使用它几周之后,它大部分成功了。仍然存在鸡/蛋问题,但我认为这是因为我没有真正考虑过每个子项目对其他项目的依赖程度。

仍然没有简单的方法来访问您不依赖的项目部分的路线,但您可能不应该链接到您不依赖的项目。我确实想弄了如何为我的“未找到”,“需要权限”和“登录”页面指定主模板和网址/调用,以便所有子项目都可以访问它们。