Member 12840127 Ответов: 1

Подходит ли использование статики для работы с CRUD


У меня есть статический класс DBO, который содержит статический метод GetConnection для установления
соединение, статический метод IUD для вставки, обновления, удаления и статический метод GetTable для извлечения данных.Подходит ли использование статики для Crud, если не то, что я мог бы использовать.

Что я уже пробовал:

public static class DBO
   {

       public static SqlConnection GetConnection()
       {
           SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["myconnection"].ConnectionString);
           if (con.State != ConnectionState.Open)
           {
               con.Open();
           }
           return con;
       }

       public static int IUD(string sql, SqlParameter[] param, CommandType cmdType)
       {
           using (SqlConnection con = GetConnection())
           {

               SqlCommand cmd = new SqlCommand(sql, con);
               cmd.CommandType = cmdType;

               if (param != null)
               {
                   cmd.Parameters.AddRange(param);
               }
               try
               {
                   return cmd.ExecuteNonQuery();
               }
               catch (Exception ex)
               {

                   throw ex;
               }

           }
       }
       public static DataTable GetTable(string sql, SqlParameter[] param, CommandType cmdType)
       {
           using (SqlConnection con = GetConnection())
           {
               using (SqlCommand cmd = new SqlCommand(sql, con))
               {
                   cmd.CommandType = cmdType;

                   if (param != null)
                   {
                       cmd.Parameters.AddRange(param);
                   }
                   SqlDataAdapter da = new SqlDataAdapter(cmd);

                   DataTable dt = new DataTable();
                   da.Fill(dt);

                   return dt;

               }
           }
       }

PIEBALDconsult

Нет, то, что вы показываете, слишком негибко и ограничивает. Точно так же используйте ADO.net интерфейсы (например, IDbConnection), а не жестко закодированные конкретные классы (например, SqlConnection).
https://www.codeproject.com/Articles/753789/Simplified-Database-Access-via-ADO-NET-Interfaces
Сказав это, я теперь использую множество методов расширения для вызова ADO.net классы-и они должны быть статическими, так что это действительно зависит от того, как вы используете статические методы.

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

Richard Deeming

catch (Exception ex)
{
    throw ex;
}


Не делай этого! Вы только что выбросили трассировку стека исключения.

Если ты действительно хотите повторно выбросить исключение, используйте:
catch (Exception ex)
{
    throw;
}


Но, поскольку вы ничего не делаете с этим исключением, вы можете просто удалить try..catch блок.

PIEBALDconsult

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

1 Ответов

Рейтинг:
5

F-ES Sitecore

Статика-это нормально, единственная проблема, которая может возникнуть у вас, - это если вы хотите реализовать модульное тестирование в дальнейшем, поскольку ваш текущий код сделает все, что его использует, непроверяемым. Кроме того, вероятно, лучше, чтобы вызывающие методы сами открывали соединение, а не заставляли GetConnection делать это. У вас должны быть соединения как можно более кратковременные, поэтому клиентскому коду лучше открыть соединение непосредственно перед его фактическим использованием.