Какой класс должен отвечать за состояние и очистку ресурсов? - PullRequest
0 голосов
/ 03 июня 2011

Я подключаюсь к базе данных (я думаю, это может быть любой ресурс), который я создаю в родительском классе и передаю для использования в дочернем классе.

Какой класс должен отвечать за очистку соединения с базой данных (закрытие соединения при исключении и т. Д.)?

Какой класс должен отвечать за состояние объекта (соединение открытия / закрытия)?

Например:

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();
        }
    }
}

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Возможно, это хорошая идея использовать шаблон провайдера: вместо того, чтобы предоставлять фактическое соединение с ребенком, вы передаете только описание того, как получить соединение. Таким образом, вы можете управлять ресурсами локально, оптимизировать (сокращать) срок службы выделенных ресурсов и локально обрабатывать ошибки.

Если вы не хотите использовать отдельный класс провайдера, вы можете использовать что-то вроде этого:

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())
        {
        }
    }
}
0 голосов
/ 03 июня 2011

Класс, который его создает, должен нести ответственность за его последующую очистку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...