0

我正在开发我的第一个 Scala 应用程序,我们使用 ActiveRecord 样式从 MongoDB 检索数据。

我有像 User 和 Category 这样的模型,它们都有一个使用该特征的伴随对象:

class MongoModel[T <: IdentifiableModel with CaseClass] extends ModelCompanion[T, ObjectId]

ModelCompanion 是一个 Salat 类,它提供了常见的 MongoDB crud 操作。这允许像这样检索数据:

User.profile(userId)

我从来没有使用过这种 ActiveRecord 查询样式。但我知道 Rails 的人正在使用它。我想我在 Play 文档(1.2 版?)上看到了它来处理 JPA。

现在它工作正常,但我希望能够在我的 MongoDB 上运行集成测试。我可以运行带有库的“嵌入式”MongoDB。最重要的是我的主机/端口配置实际上是在MongoModel类上硬编码的,该类由所有模型伙伴扩展。

我希望能够在运行集成测试(或我将来可以创建的任何其他“配置文件”)时指定不同的主机/端口。


我非常了解依赖注入,在 Java 中使用 Spring 多年,以及我的应用程序中所有这些静态内容的缺点。我看到现在有一​​种对 Scala 友好的方式来配置 Spring 应用程序,但我不确定在 Scala 中使用 Spring 是否合适。

我已经阅读了一些关于 Cake 模式的东西,它似乎可以做我想做的事,是某种类型安全的、经过编译时检查的 spring 上下文。我一定要使用 Cake 模式,还是 Scala 中还有其他优雅的替代方案?我可以继续使用 ActiveRecord 样式,还是它是可测试性的完全反模式?

谢谢

4

2 回答 2

2

没有任何静态引用 - 使用 Cake 模式,您为 2 个命名空间/环境获得了 2 个不同的类,每个类都独立地覆盖“主机/端口”资源。创建一个包含您的资源的特征,继承它 2 次(通过提供有关主机/端口的实际信息,具体取决于环境)并添加到适当的伴随对象(用于生产和测试)。在内部MongoModel添加作为您的新特征的自我类型,并重构所有主机/端口引用MongoModel,以使用该自我类型(您的新特征)。

于 2013-01-08T01:23:23.010 回答
1

我肯定会选择蛋糕图案。

您可以阅读以下文章,其中展示了如何在 Play2 应用程序中使用蛋糕模式的示例:http: //julien.richard-foy.fr/blog/2011/11/26/dependency-injection-in-scala- with-play-2-it-s-free/

于 2013-01-08T08:33:15.143 回答