5

データベースへの読み取りと書き込みを提供する一連の機能を公開するデータベース層を開発します。これに関連する一連の質問があるので、誰かにアドバイスしてもらいたい

  1. データベースの例外 (つまり、タイムアウトの例外) を処理するにはどうすればよいですか?または dll クライアントでそれらを処理したままにします。

  2. dll はスレッド セーフではないため、dll インスタンスごとに 1 つの接続を使用する必要がありますか? これにより、パフォーマンスが向上します。

  3. クラス ライブラリを開発するための一般的なルールはありますか?

C# vs2008 と SQL2008 を使用しています

4

2 に答える 2

5

1: あなた次第。それらについて実際には何もできないので、呼び出し元から隠す必要がない限り、おそらくそれらを表面化させます(同様の、あまり具体的でない例外に置き換えます)

2: 接続はできるだけ「ローカル」で短命に保つ必要があります。多くの場合、メソッド呼び出しごとに 1 つです。ほとんどのプロバイダーには接続プールがあります。つまり、同期や再入可能性などについてストレスを感じることなく (同じ接続文字列を使用している限り)、同じ基になる接続を取得できます (必要に応じてより多くの接続が割り当てられます)。

3: リポジトリ パターンのようなパターンを見てください。LINQ-to-SQL、Entity Framework、NHibernate などの ORM フレームワークも見てください。

すなわち

Customer GetCustomer(int id) {
    using(var conn = CreateConnection()) {
        conn.Open();
        // etc
    }
}
于 2009-05-25T09:54:27.867 に答える
3

私があなたに与える唯一のアドバイスは、これは私よりもはるかに賢い人々によって以前に行われ、彼らは落とし穴から学んだということです. おそらく、独自のコードを展開するのではなく、カスタマイズできるフレームワークを読むのに十分な時間を費やすことができるでしょうか?

それ以外に、db レイヤーのコンシューマーについてよく考えることをお勧めします。何をすべきかを判断するために、レイヤー内で何が起こっているのかをユーザーが知る必要がないことを確認してください。使いやすい再利用可能なパブリック インターフェイスを作成すると、これは非常に役立つはずです。

また、Linq to SQL を詳しく調べることをお勧めします。これを利用すると、ADO.net やバニラ ORM にとどまるのではなく、クラス ライブラリの外観がまったく異なるものになるためです。

于 2009-05-25T09:52:56.607 に答える