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