я должен использовать статический класс DbUtil для веб-сайтов, это опасно? - PullRequest
3 голосов
/ 04 октября 2010

нормально ли использовать что-то подобное в Интернете: (мое приложение на asp.net mvc)

public static class DbUtil
{  
      public static int Insert(object o, string cs)
        {
            using (var conn = new SqlConnection(cs))
            using (var cmd = conn.CreateCommand())
            {
              ...

                conn.Open();
                return Convert.ToInt32(cmd.ExecuteScalar());
            }
        }
}

использование:

public class Repository<T> : IRepository<T>
{
       public virtual int Insert(T o)
       {
            return DbUtil.Insert(o, Cs);
       }
}

и после внедрения конструктора в сервис или контроллер

    public MyController(
        IRepository<Organization> organizationRepository)
    {
        this.organizationRepository = organizationRepository;
    }

Ответы [ 2 ]

2 голосов
/ 04 октября 2010

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

1 голос
/ 04 октября 2010

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

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

...