Ja, es ist sicher, eine Verbindung weiterzugeben. Sie behandeln die Verbindung in einem äußeren Steuerblock. Daran ist nichts Unsicheres.
Was unsicher ist, ist das Schreiben von Code, der nicht garantiert, dass die Verbindung rechtzeitig ordnungsgemäß entsorgt wird. Das Vergessen, eine Ressource zu bereinigen, hat nichts mit dem Weitergeben zu tun. Sie können genauso gut Code schreiben, der eine hängende Verbindung hinterlässt, ohne sie irgendwo weiterzugeben.
In C ++ sind Sie durch RAII geschützt, wenn Sie auf dem Stapel zuweisen oder intelligente Zeiger verwenden. Machen Sie in C # eine harte Regel, dass alle verfügbaren Objekte (wie Verbindungen) in einem "using" -Block deklariert werden. In Java mit Try-finally-Logik aufräumen. Führen Sie Codeüberprüfungen für alle Datenschichtcodes durch, um dies sicherzustellen.
Der häufigste Anwendungsfall ist, wenn Sie mehrere Operationen haben, die in vielen Permutationen kombiniert werden können. Und jede dieser Permutationen muss eine Atomtransaktion sein (alle erfolgreich oder Rollback). Dann müssen Sie die Transaktion (und damit die entsprechende Verbindung) an alle Methoden weitergeben.
Angenommen, wir haben viele foobar () -Aktionen, die auf verschiedene Arten als Atomtransaktionen kombiniert werden können.
//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
Übrigens möchten Sie Verbindungen so spät wie möglich öffnen und sie so schnell wie möglich entsorgen. Ihre Teamkollegen könnten Recht haben, wenn Sie Verbindungen als Objektmitglieder behandeln, sie als unnötigen Status einführen und Verbindungen viel länger als nötig offen lassen. Das Übergeben einer Verbindung oder Transaktion als Parameter ist jedoch nicht von Natur aus falsch.
Übrigens. Abhängig von der Unterstützung Ihrer Sprache für erstklassige Funktionen können Sie eine Liste von foobar () - Aktionen ausführen. Eine Funktion könnte also alle Permutationen der Aktionen verarbeiten. Eliminieren der Duplizierung des äußeren Steuerblocks für jede Permutation.