在创建了一个非常混乱的 Play 项目之后,我决定将它分解为子项目可能是一个好主意,这样依赖关系就可以编译项目的一部分等。
不幸的是,我发现子项目对整个项目有轻微的依赖性。耦合足够小,我并不为此感到羞耻,但 SBT 不会让我声明循环依赖。(我认为这是一件好事。)
这是一个例子。我有一个users
子项目,它定义了几个与用户打交道的模型。还有一些基本视图,您可能会期望与用户打交道:登录、注销、changePassword、updateSettings 等。问题是,这些都依赖于我的主模板,因此它们看起来像网站的其余部分。所以我需要一些方法让用户子项目知道它应该嵌入它的视图的主模板是什么。
再举一个例子,大多数网站都有一个“默认”页面,当用户尝试访问他们无权访问的信息或注销后等时,他们会将用户发送到该页面。子项目需要知道该页面是什么他们可以根据需要重定向到默认页面。但是默认页面是在主项目中定义的,子项目不能依赖。
我开始尝试通过在主项目中使用我的 Global.onStart 方法将设置“注入”到子项目中来解决这个问题。例如,我创建了一个var
来保存默认页面,然后controllers.users.App.defaultPage
在应用程序启动时设置为正确的值。但后来我意识到每个子项目都需要一些钩子来告诉它如何适应主项目,而试图手动跟踪所有这些只是自找麻烦。
有没有人想出处理这个问题的好方法?每个子项目是否应该有一个Configuration
主项目可以修改的默认值?有没有办法让每个子项目声明它需要什么配置,以便主项目未能提供它会触发错误?我应该为我的代码的耦合程度感到羞耻,然后回到绘图板上吗?
谢谢!