0

私は最初のScalaアプリケーションに取り組んでおり、ActiveRecordスタイルを使用してMongoDBからデータを取得しています。

UserやCategoryのようなモデルがあり、それらはすべて、トレイトを使用するコンパニオンオブジェクトを持っています。

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

ModelCompanionは、一般的なMongoDBクラッド操作を提供するSalatクラスです。これにより、次のようなデータを取得できます。

User.profile(userId)

私はこのActiveRecordクエリスタイルの経験がありませんでした。しかし、私はRailsの人々がそれを使用していることを知っています。そして、JPAを扱うためにPlayドキュメント(バージョン1.2?)でそれを見たと思います。

今のところ正常に動作しますが、MongoDBで統合テストを実行できるようにしたいと思います。「埋め込まれた」MongoDBをライブラリで実行できます。MongoModel重要なのは、私のホスト/ポート構成が、すべてのモデルコンパニオンによって拡張されたクラスに実際にハードコーディングされていることです。

統合テスト(または将来作成できるその他の「プロファイル」)を実行するときに、別のホスト/ポートを指定できるようにしたい。


私は、Javaで長年Springを使用している依存性注入と、私のアプリケーションにおけるこれらすべての静的なものの欠点をよく理解しています。Springアプリケーションを構成するためのScalaに適した方法があることを知りましたが、ScalaでSpringを使用することが適切かどうかはわかりません。

Cakeパターンについていくつか読んだことがありますが、これは、タイプセーフでコンパイル時にチェックされるSpringコンテキストのようなものであり、私が望むことを実行しているようです。私は間違いなくケーキパターンに行くべきですか、それともScalaに他のエレガントな選択肢がありますか?ActiveRecordスタイルを使い続けることはできますか、それともテスト容易性のための完全なアンチパターンですか?

ありがとう

4

2 に答える 2

2

静的参照はありません-Cakeパターンを使用すると、2つの名前空間/環境に対して2つの異なるクラスが取得され、それぞれが独自に「ホスト/ポート」リソースをオーバーライドします。リソースを含むトレイトを作成し、それを2回継承し(環境に応じてホスト/ポートに関する実際の情報を提供することにより)、適切なコンパニオンオブジェクトに追加します(prodおよびtest用)。内部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 に答える