Ya itu aman untuk melewati koneksi. Anda menangani koneksi di blok kontrol luar. Tidak ada yang tidak aman tentang itu.
Apa yang tidak aman adalah menulis kode yang tidak menjamin koneksi dibuang dengan benar tepat waktu. Lupa membersihkan sumber daya tidak ada hubungannya dengan menyebarkannya. Anda bisa dengan mudah menulis kode yang meninggalkan koneksi yang menggantung tanpa melewati di mana saja.
Di C ++, Anda dilindungi oleh RAII jika Anda mengalokasikan pada stack atau menggunakan smart pointer. Dalam C # buat aturan keras bahwa semua objek pakai (seperti koneksi) dideklarasikan di blok "using". Di Jawa bersih dengan logika try-akhirnya. Memiliki ulasan kode pada semua kode lapisan data untuk memastikan hal ini.
Kasus penggunaan yang paling umum adalah ketika Anda memiliki beberapa operasi yang dapat digabungkan dalam banyak permutasi. Dan masing-masing permutasi ini harus berupa transaksi atom (semua berhasil atau kembalikan). maka Anda harus melewati transaksi (dan karena itu koneksi yang sesuai) berkeliling ke semua metode.
Misalkan kita memiliki banyak tindakan foobar () yang dapat digabungkan dalam berbagai cara sebagai transaksi atom.
//example in C#
//outer controlling block handles clean up via scoping with "using" blocks.
using (IDbConnection conn = getConn())
{
conn.Open();
using (IDbTransaction tran = conn.BeginTransaction())
{
try
{//inner foobar actions just do their thing. They don't need to clean up.
foobar1(tran);
foobar2(tran);
foobar3(tran);
tran.Commit();
}
catch (Exception ex)
{ tran.Rollback(); }
}
}//connection is returned to the pool automatically
BTW Anda akan ingin membuka koneksi selambat mungkin, buang mereka sesegera mungkin. Rekan satu tim Anda mungkin benar jika Anda memperlakukan koneksi sebagai anggota objek, memperkenalkan mereka sebagai keadaan yang tidak perlu, dan membiarkan koneksi terbuka lebih lama dari yang diperlukan. Tetapi tindakan melewati koneksi atau transaksi sebagai parameter tidak salah secara inheren.
BTW. Bergantung pada dukungan bahasa Anda untuk fungsi kelas satu Anda dapat mengambil dalam daftar tindakan foobar (). Jadi satu fungsi bisa menangani semua permutasi dari tindakan. Menghilangkan duplikasi blok kontrol luar untuk setiap permutasi.