モデルの中でのデータベース

たとえばモデル(リポジトリとかテーブルモジュールとか)を構築したらデータベースを勝手に開くとする。

//UI
void save_proc(){
 var productRepository = new ProductRepository();
 productRepository.save(product);
}

//repository
class ProductRepository{
  public void save(Product product){
     connection.executeUpdate("INSERT INTO ...");
  }
}

connectionを閉じるタイミングがない。Disposableにしてusingで囲むしかない。

//UI
void save_proc(){
  using (var productRepository = new ProductRepository()){
     productRepository.save(product);
  }
}

//repository
class ProductRepository : IDisposable{
  public void save(Product product){
     connection.executeUpdate("INSERT INTO ...");
  }
  void Dispose(){
    connection.Close();
    connection.Dispose();
  }
}

単独なら良いが、複数リポジトリを使ってトランザクション共有すると

//UI
void save_proc(){
  using (var connection = getConnection()){
    using (var productRepository = new ProductRepository(connection)){
       productRepository.save(product);
    }
    using (var orderRepository = new OrderRepository(connection)){
       orderRepository.save(order);
    }
  }
}

1個めがDisposeしたときにconnectionが破棄される。2個めは失敗する。外部の接続だったらDisposeのとき無視するとか必要。
ってかいちいちusingで囲む?うざいんだよ