モデルの中でのデータベース
たとえばモデル(リポジトリとかテーブルモジュールとか)を構築したらデータベースを勝手に開くとする。
//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で囲む?うざいんだよ