我在父类中创建并传递以在子类中使用的数据库连接(我猜它可能是任何有状态的资源)。
哪个类应该负责清理数据库连接(在异常等情况下关闭连接)?
哪个类应该对对象的状态负责(打开/关闭连接)?
例如:
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();
}
}
}
答案 0 :(得分:1)
使用提供者模式也许是一个好主意:您只传递有关如何获取连接的描述,而不是向子提供实际连接。这样,您就可以在本地管理资源,优化(缩短)已分配资源的生命周期并在本地处理错误。
如果您不想使用单独的提供程序类,可以使用以下内容:
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())
{
}
}
}
答案 1 :(得分:0)
创建它的班级应该负责清理它。