Evet, bir bağlantının etrafından geçmek güvenlidir. Bağlantıyı bir dış kontrol bloğunda idare edersiniz. Bu konuda güvensiz bir şey yok.
Güvensiz olan, bağlantının zamanında uygun şekilde atandığını garanti etmeyen kod yazmaktır. Bir kaynağı temizlemeyi unutmak, onu geçirmeyle ilgisi yoktur. Asılı bir bağlantıyı herhangi bir yere iletmeden bırakan kodu kolayca yazabilirsiniz.
C ++ 'da, yığına ayırırsanız veya akıllı işaretçiler kullanırsanız RAII tarafından korunursunuz. C # 'da tüm tek kullanımlık nesnelerin (bağlantılar gibi) bir "using" bloğunda bildirilmesi zor bir kural oluşturur. Java'da try-finally mantığı ile temizleyin. Bunu sağlamak için tüm veri katmanı kodunda kod incelemeleri yapın.
En yaygın kullanım durumu, birçok permütasyonda birleştirilebilecek birkaç işleminiz olduğu zamandır. Ve bu permütasyonların her birinin bir atomik işlem olması gerekir (hepsi başarılı veya geri dönüş). işlemi (ve dolayısıyla ilgili bağlantıyı) tüm yöntemlere aktarmanız gerekir.
Atomik işlemler olarak çeşitli şekillerde birleştirilebilecek birçok foobar () eylemimiz olduğunu varsayalım.
//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 bağlantıları olabildiğince geç açmak isteyeceksiniz, mümkün olan en kısa sürede atın. Bağlantıları nesne üyeleri olarak ele alıyorsanız, gereksiz durum olarak tanıtırsanız ve bağlantıları gereğinden fazla açık bırakırsanız, takım arkadaşlarınız doğru olabilir. Ancak, bir bağlantıyı veya işlemi parametre olarak iletme eylemi doğası gereği yanlış değildir.
BTW. Dilinizin birinci sınıf işlevleri desteklemesine bağlı olarak foobar () eylemleri listesinde yer alabilirsiniz. Böylece bir işlev, eylemlerin tüm permütasyonlarını kaldırabilir. Her permütasyon için dış kontrol bloğunun çoğaltılmasının ortadan kaldırılması.