daiki130412
@daiki130412 (だいち)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

DAOパターンでのクラス構成について

Q&A

Closed

現在、C#を用いてDBを扱うコードを書いております。
その中で、クラス構成についてお聞きしたいことがあり質問をいたしました。

DBに接続して行う機能は検索(全て、または条件付き)、追加、削除、更新の4つです。
このとき、各メソッドはDBに接続してtry~catchを書いて、処理を行う、といった構成になっています。

大部分(DB接続、トランザクションスコープ)は共通しているため、これをメソッドに抜き出してもよいのでしょうか?
また、現在は特定のテーブルだけにアクセスするクラスとなっていますが、これを任意のテーブルにアクセスできるように変更(私の考えでは基底クラスをつくり、テーブルごとに派生クラスを作る)することはできるのでしょうか?

考えてみたものの、どこをメソッドに抜き出せば良いのか思いつかなかったため、教えていただきたく思います。
よろしくお願いします。

0

1Answer

大部分(DB接続、トランザクションスコープ)は共通しているため、これをメソッドに抜き出してもよいのでしょうか?

DB接続: OK

トランザクションスコープは、DB接続を抜き出した(ラップした)型に以下のようなメソッド生やすと良いかも。

private IDbConnection connection;

public void RunInTransaction(Action tableAction) {
    var transaction = this.connection.BeginTransaction();
    try {
        tableAction();
        transaction.Commit();
    }
    catch (...) { // 例外はいい感じに指定してね
        transaction.Rollback();
    } 
}

使う側

    var conn = ...; // ラップした型のインスタンス
    conn.RunInTransaction(() => {
        // ここにテーブルに対する処理を書く
    });

テストしてないから、たぶんコンパイル通りそうなニュアンスで書いてます。

1Like

Comments

  1. @daiki130412

    Questioner

    ご丁寧にお答えいただきありがとうごさいます!
    参考にして、自分のコードを修正します!

Your answer might help someone💌