Открытое sql соединение в бизнес сервисе - PullRequest
1 голос
/ 27 января 2012

Считаете ли вы, что мой класс бизнес-сервисов открывает SqlConnection?

На самом деле бизнес-сервис не должен знать о конкретном поставщике данных?!

открытый классUnitService:

 public void DeleteUnit(Unit unit)
            {
                using (SqlConnection con = new SqlConnection());
                using (TransactionScope trans = new TransactionScope())
                {
                    con.Open();

                    _unitDataProvider.Delete(unit,con);
                    _employeeDataProvider.UpdateEmployees(con);

                    trans.Complete();
                }             
            }

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Ваше мнение очень зависит от мнения ...

Я люблю абстрагировать код и отсоединять везде, где это возможно. Вопрос, как всегда, заключается во времени и требованиях.

Для небольшого простого проекта, который не требует обширного модульного тестирования в рамках бизнес-уровня, ваше соединение, хотя и не обязательно следует передовой опыт , может быть именно тем, что требуется клиенту / конечному пользователю, и может позволить предоставить программное обеспечение более своевременно.

Для более крупного / более сложного / etc проекта лучше всего абстрагировать слой персистентности.

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

Надеюсь, это поможет?

0 голосов
/ 27 января 2012

Считаете ли вы, что мой класс бизнес-услуг открывает SqlConnection?

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

Еще одна вещь, которую я хотел бы предложить, это использовать операторы «Using» для IDisposable Objects в случае SQLConnection class

Я имел в виду Это должно быть как ниже.

using (System.Data.SqlClient.SqlConnection con = new SqlConnection("YourConnection string")) {
    con.Open();
    SqlCommand cmd = new SqlCommand();
    string expression = "Parameter value";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "Your Stored Procedure";
    cmd.Parameters.Add("Your Parameter Name", SqlDbType.VarChar).Value = expression;
    cmd.Connection = con;
    using (IDataReader dr = cmd.ExecuteReader()) {
        if (dr.Read()) {
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...