あなたの質問に答えるには、Repository Patternで少し読んでください。このパターンは、以下を含む多くの利点を提供するために使用されます。
- データロジックまたはWebサービスアクセスロジックを集中管理します。
- これは単体テストの代替点を提供します。
- これは、アプリケーションの全体設計が進化するにつれて適応できる柔軟なアーキテクチャを提供します。
質問:「これは一般的な対応ですか?」答えは「それはあるべきだ」残念ながら、私はそれが私が好むほどには見ません。
ここでは、作成したリポジトリをコントローラクラスのコンテキスト内に表示します。グローバルはオブジェクトがどのスコープからでもアクセス可能であることを意味します。hereウィキペディアで
いずれにしても利点の1つは、リポジトリが、リポジトリの正確で具体的なバージョンを使用して、データにアクセスする方法(またはデータにアクセスする場所)を変更できるようにすることです。したがって、あなたは持っているかもしれません:
- IRepository - 具体的なリポジトリが実装するあなたのインターフェイス。
- DatabaseRepository - データベース内のデータにアクセスします。
- FlatFileRepository - フラットファイルからデータにアクセスします。
- など
あなたが他のデータソースへの切り替えをご希望の場合、それはあなたのコントローラ内で具体的な実装をスワップアウトするように簡単です。 (dependency injectionでこれを行うためのより高度で柔軟な方法がありますが、それはこの質問の範囲外ですが、リポジトリパターンに大きく影響されます)
いずれにしても、プロジェクトチームは「ねえ、私たちはすべてのデータをフラットファイルに保存するからデータベースを使用するように切り替えるつもりだ」と決めます。もしあなたがあなたのコード全体で特定のリポジトリのインスタンス化を散らばっていれば、今はリポジトリパターンの利点をやや否定して、修正と更新の分野がたくさんあります。しかし、コントローラのメンバリポジトリを宣言することで、FlatFileRepositoryからDatabaseRepositoryに切り替え、新しいリポジトリを実装するだけで完了です!チームの皆さんは幸せです!
更新:「なぜクラス変数をインスタンス化するのですか?」
この質問に答えるには、2つのオプションを考えなければなりません。最初の選択肢は、メモリ内に比較的小さなオブジェクトを保持できるということです。もう1つの選択肢は、ユーザーがアクションの1つにアクセスするたびに新しいオブジェクトをインスタンス化して新しいメモリを割り当て(オブジェクトが入っているスコープを離れるときに割り当てを解除する)ことができ、あなたのウェブアプリケーションをホストしているサーバー。
ウェブサイトがどのように使用されているかを考えると、ユーザーは頻繁にその行動に当たっています。あらゆる行動はあなたのウェブサイトの一部を表しています。リポジトリが必要なたびにインスタンス化すると、実際に必要とされるよりもはるかに大きな作業負荷をサーバに与えることができます。特に、サイトの規模が大きくなるほどです。 (私は他の人が、チュートリアルに示されている方法と個々のアクションのインスタンス化とをやりたい理由を考えることができると確信しています)。私は上で述べた。これは、「変更の効率」または保守性を向上させることです。
あなたの質問へのより良い回答に役立つ希望!
リポジトリはかなり広い概念です。あなたはあなたの質問から何らかの意味を理解するために、あなたの正確なシナリオをはるかに具体的な方法で定義しなければなりません。 –
@DarinDimitrovより正確なシナリオで編集されました。 –
@DarinDimitrov - (リポジトリパターンを使用してデータレイヤーにアクセスする)多くのASP.NET MVCの例に示すように、彼がリポジトリを参照していると仮定しています。通常、これらの例では、具象リポジトリオブジェクトがEFを介してデータベースにアクセスしています。 – JasCav