簡體   English   中英

哪個 class 應該負責 state 和清理資源?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM