質問

更できの良し悪いの考えを私のドメインがインタラクティブに変化するスタイルリポジトリとしてsingletons?なぜですか?

やべっかを使用依存性インジェクタコンテナ管理マリポジトリを決定いsingletonsはありませんか?

まだ読む DDDを迅速に, いあいリポジトリの例です。

役に立ちましたか?

解決

これを行うにはいくつかの方法を見てきました。

最も一般的な方法は、依存性注入を使用して、リポジトリを使用するオブジェクトにリポジトリを注入することです。通常、これらはプレゼンターまたはコントローラークラスですが、場合によっては、モデルがリポジトリを呼び出します。通常、これを避ける方が良いでしょう。これを行うためにdi-containerを使用できる場合は、それを実行します。

リポジトリにシングルトンパターンを実装させることもできます。シングルトンは通常静的メソッドを使用するため、これを回避しようとします。これにより、シングルトンを呼び出すコードのテストがより難しくなります。この方法で処理する必要がある場合は、シングルトンを呼び出すコードを分離し、「手動」を使用してください。呼び出しを行うクラスにシングルトンを注入する依存性注入。これは、そうでなければ得られるであろう密結合の一部を取り除きます。

リポジトリが呼び出されない例を見てきました。誰かがモデル内のオブジェクトグラフをナビゲートし、ロードされていないオブジェクトを要求すると、モデルは単にイベントを発生させ、リポジトリはこのイベントに反応します。このように、リポジトリへの呼び出しはなく、モデルから完全に切り離されています。私はこのアーキテクチャを自分で使用していませんが、とてもきれいに見えます。

他のヒント

依存性注入コンテナを使用して、リポジトリを作成する方法と場所を決定します。

を使用して

UserRepository.Instance.Find(userId);

テストに対する障壁を作成しています。

Constructor Injectionを使用してリポジトリをサービスに渡す場合、リポジトリをモックに簡単に置き換えることもできます。

いこいのと同じ問題です。うすることができるようになり、リポジトリにシングルトンのオブジェクトで作品が多く使われている.ことになるべきではないたシングルトンをご利用の場合オブジェクトで作品なので、リポジトリでも多くのメモリーオブジェクトとかいう一度だけとい時利用のものに限ります。しかし、この場合に正しいとは言えません。

私は本当に巨大なプロジェクトがあり、新しいサービスを追加したいので、それが私のシステムのハードウェアの代表者になるとしましょう。このサービスには多くのクラスからアクセスできるようにしたいのですが、サービスへのアクセスを制御するサービスまたはレイヤーのインスタンスが1つだけであることを確認したいと思います。私のすべてのシステム(200以上のクラス)からこのサービスを注入するのは大変な作業です。私にとって「シングルトン」または「サービスロケーター」このタスクに適しています。

私が理解している限り、ドメインにはリポジトリインターフェースのみが含まれています。つまり、単一のインターフェースに対して多くのリポジトリ実装が存在する可能性があります。したがって、インターフェイスで静的メソッドを定義することはできないため、リポジトリを静的クラスにすることはできません。 (注:一部の言語では、インターフェイスで静的メソッドを定義できますが、私にはあまり意味がありません。)

リポジトリは通常、エンティティをデータベース、ファイルなどと同期させるためのものです。そのため、エンティティは不安定な依存関係を持ちます。つまり、それらはシングルトンにはなれず、周囲の依存関係のみを持つことができます。以下に記事を示します。著者でさえ面白い部分は、ドメインでシングルトンを使用できることを教えてくれます。

私の理解では、多数ではなく単一のエンティティのみを保持するリポジトリを作成する方がはるかにクリーンです。コードが単一の責任原則を満たすようにしたい場合、エンティティではなくリポジトリの責任です。 a>。

scroll top