繁体   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