1

WEB API現在のプロジェクト用に開発する必要があります。私のデータベースはPOSTGRESQLで、使用していませんEntity Framework。私は独自のデータアクセス層を持っています。各コントローラーの each ( GETPUTPOSTDELETEなど) メソッド内で、データベースにアクセスしたいと考えています。ここで私の質問は、データ アクセス レイヤー オブジェクトをインスタンス化するための正しいアプローチは何かということです。次の2つはアプローチです:-

  1. 各コントローラーのすべてのメソッドでインスタンス化し、作業が完了したらそこで破棄します。しかし、毎回オブジェクトをインスタンス化して破棄するのはコストがかかると思います。
  2. 一度グローバルにインスタンス化し、各コントローラーの各メソッドからアクセスします。

それを行うための正しいアプローチは何ですか?

とても感謝しています。

4

1 に答える 1

2

この質問に対する正しい答えは、データ アクセス層をどのように実装したかによって大きく異なります。そうは言っても、あなたを助けるかもしれないいくつかの一般的な指針をあなたに与えることは確かに可能です. C# で個々のオブジェクトを作成することは、一般に特に費用のかかる操作ではなく、費用がかかる傾向にあるオブジェクトに関連付けられたリソースです。postgresql C# プロバイダーは接続プールをサポートしているため ( npgsql ドライバーを使用していると思いますか?)、データ アクセス オブジェクトの 1 つをインスタンス化するたびにデータベースへの新しい接続が作成されるのではなく、接続がプールに保持され、コードの必要に応じて割り当てられます。したがって、複雑さと状態処理を避けるために、最も簡単な方法は、おそらくコントローラーの各メソッドで新しいオブジェクトを作成することです。

または、データ アクセス オブジェクトをプライベート フィールドとしてコントローラーに追加し、すべてのコントローラー メソッドがデータ アクセス レイヤーを必要とすると仮定して、コントローラーのコンストラクターでインスタンス化することもできます。これにより、コードの繰り返しを避けることができ、オブジェクトの有効期間はどちらの場合も非常に似ています (つまり、リクエストごとに 1 つのオブジェクト)。

于 2013-07-07T12:06:22.947 に答える