[英]Which class should be responsible for state and for cleaning up ressources?
我在父 class 中創建並傳遞給子 class 的數據庫連接(我猜它可能是任何有狀態的資源)。
哪個 class 應該負責清理數據庫連接(使連接在異常時關閉等)?
哪個 class 應該負責 object 的 state(打開/關閉連接)?
例如:
public class Parent
{
using(var dbConnection = new SqlConnction(connectionString))
{
var child = new Child(dbConnection);
child.MethodUsingTheConnectionPassedInTheConstructor();
}
}
public class Child
{
private readonly IDbConnection _dataBaseConnection;
public Child(IDbConnection dbConnection)
{
_dataBaseConnection = dbConnection;
}
public MethodUsingTheConnectionPassedInTheConstructor()
{
try
{
_dataBaseConnection.Open();
...
}
finally
{
_dataBaseConnection.Close();
}
}
}
或許使用提供者模式是個好主意:您無需向孩子提供實際的連接,而是僅傳遞有關如何獲取連接的描述。 這樣,您就可以在本地管理資源、優化(縮短)分配資源的生命周期並在本地處理錯誤。
如果您不想使用單獨的提供程序 class,則可以使用以下內容:
public class Parent
{
var child = new Child(() => new SqlConnction(connectionString));
child.MethodUsingTheConnectionPassedInTheConstructor();
}
public class Child
{
private readonly Func<IDbConnection> _connProvider;
public Child(Func<IDbConnection> connProvider)
{
_connProvider = connProvider;
}
public MethodUsingTheConnectionPassedInTheConstructor()
{
using(var connection = _connProvider())
{
}
}
}
創建它的 class 應該負責事后清理它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.