Я считал несколько других вопросов по этой теме (здесь, здесь, и здесь), но должен все же видеть большой ответ. Я разработал свою справедливую долю уровней доступа к данным прежде и лично предпочитаю использовать классы экземпляра вместо статических классов. Однако это - больше персонального предпочтения (мне нравится тестировать мои бизнес-объекты, и этот подход делает насмешку DAL легче). Я использовал статические классы для доступа к базе данных прежде, но я всегда чувствовал себя немного небезопасным в уместности такого дизайна (особенно в среде ASP.NET).
Может любой предоставлять некоторым хорошим профессионалам/недостаткам относительно этих двух подходов к разработке классов доступа к данным с поставщиками ADO.NET (никакой ORM) в приложении ASP.NET в частности. Не стесняйтесь вмешиваться, если у Вас есть некоторые более общие помехи по сравнению с подсказками по классу экземпляра также.
В частности, проблемы, которыми я обеспокоен:
Спасибо!
Статические подходы на самом деле обычно имеют один, и только одно, главное преимущество: их легко реализовать.
На основе экземпляров Подходы к использованию для:
статические подходы могут выиграть на:
В целом я чувствую, что подходы на основе экземпляра превосходят. Это становится более важно, если вы собираетесь понять за пределами одного сервера, поскольку статический подход будет «сломаться», как только вы начнете установить его на нескольких машинах ...
Моего общего чувства: почему мстится, если вам не нужно?
Я использую статические классы, когда не будет никакого использования для нескольких экземпляров, и нет необходимости для членов экземпляров. Что касается дала, точка в том, что есть только один. Зачем создавать его, если в этом нет значения?
Посмотрите Эта ссылка , что показывает, что вызовы статического метода являются быстрее, чем вызовы метода класса экземпляров.
Эта ссылка показывает, что преимущество использования статического класса состоит в том, что компилятор может проверить, чтобы убедиться, что члены экземпляра не добавляются.
Эта ссылка показывает, что статический класс может использоваться в качестве удобного контейнера для наборов методов, которые просто работают на входных параметрах и не должны получать или устанавливать какие-либо поля внутреннего экземпляра. Для дал это именно то, что у вас есть. Нет причин создавать какие-либо поля внутреннего экземпляра, и, следовательно, без причин инсультировать.
Для меня главная причина в том, что мне не нужно держать состояние этого DAL объекта. Состояние объектов, которые он использует, не охватывает объем метода, который они встроен. Таким образом, почему вы сохранили несколько экземпляров объекта, если они все одинаковы?
с последними версиями ADO.Net, кажется, является наилучшей практикой для создания и уничтожения подключения к базе данных в рамках объема объема Ваш звонок, и позволить ConnectionPool позаботиться о всей проблеме восстановления связи.
Опять же с последними версиями .NET Framework Framework, DescractsCope (которая была бы одной из причин для управления вашими соединениями) двигаться до уровня бизнес, что позволяет присоединиться к нескольким вызовам к DAL в пределах одной и той же области.
Итак, я не вижу случай для создания и уничтожения (или кеша) экземпляров DAL.
Я использовал статический дал в течение многих лет, и я согласен с вашими проблемами. Резьба и параллелизм является наиболее сложным, и в моем случае я храним различные объекты подключения в потоке статических структур. Он оказался очень масштабируемым и хорошо выполняет хорошо, даже теперь, когда я преобразую PropertyInfo в PropertyDescriptor, который дает мне одинаковые преимущества отражения с лучшей производительностью. В моем дал мне просто нужно написать:
List<Entity> tableRows = SQL.Read(new SearchCriteria(), new Table());
Все не появляются с SQL Static Class, и это делает мой код намного проще.