Каковы профессионалы/недостатки выбора между статическим и классами доступа к данным экземпляра в веб-приложении?

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

Может любой предоставлять некоторым хорошим профессионалам/недостаткам относительно этих двух подходов к разработке классов доступа к данным с поставщиками ADO.NET (никакой ORM) в приложении ASP.NET в частности. Не стесняйтесь вмешиваться, если у Вас есть некоторые более общие помехи по сравнению с подсказками по классу экземпляра также.

В частности, проблемы, которыми я обеспокоен:

  1. Поточная обработка и параллелизм
  2. Масштабируемость
  3. Производительность
  4. Любые другие неизвестные

Спасибо!

10
задан Community 23 May 2017 в 11:45
поделиться

4 ответа

Статические подходы на самом деле обычно имеют один, и только одно, главное преимущество: их легко реализовать.

На основе экземпляров Подходы к использованию для:

  1. резьба и параллелизма - вам не нужно / столько синхронизации, поэтому вы получаете лучшую пропускную способность
  2. масштабируемость - одинаковые проблемы, что и выше
  3. . - одинаковые проблемы, что и выше
  4. Тестируемость - это намного проще тестировать, поскольку издевание экземпляра простой, и тестирование статических классов безусловно,

статические подходы могут выиграть на:

  1. память - у вас только один экземпляр , поэтому более низкий след
  2. согласованность / обмен - это легко сохранить один экземпляр в соответствии с собой.

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

12
ответ дан 3 December 2019 в 21:21
поделиться

Моего общего чувства: почему мстится, если вам не нужно?

Я использую статические классы, когда не будет никакого использования для нескольких экземпляров, и нет необходимости для членов экземпляров. Что касается дала, точка в том, что есть только один. Зачем создавать его, если в этом нет значения?

Посмотрите Эта ссылка , что показывает, что вызовы статического метода являются быстрее, чем вызовы метода класса экземпляров.

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

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

5
ответ дан 3 December 2019 в 21:21
поделиться

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

с последними версиями ADO.Net, кажется, является наилучшей практикой для создания и уничтожения подключения к базе данных в рамках объема объема Ваш звонок, и позволить ConnectionPool позаботиться о всей проблеме восстановления связи.

Опять же с последними версиями .NET Framework Framework, DescractsCope (которая была бы одной из причин для управления вашими соединениями) двигаться до уровня бизнес, что позволяет присоединиться к нескольким вызовам к DAL в пределах одной и той же области.

Итак, я не вижу случай для создания и уничтожения (или кеша) экземпляров DAL.

0
ответ дан 3 December 2019 в 21:21
поделиться

Я использовал статический дал в течение многих лет, и я согласен с вашими проблемами. Резьба и параллелизм является наиболее сложным, и в моем случае я храним различные объекты подключения в потоке статических структур. Он оказался очень масштабируемым и хорошо выполняет хорошо, даже теперь, когда я преобразую PropertyInfo в PropertyDescriptor, который дает мне одинаковые преимущества отражения с лучшей производительностью. В моем дал мне просто нужно написать:

 List<Entity> tableRows = SQL.Read(new SearchCriteria(), new Table());

Все не появляются с SQL Static Class, и это делает мой код намного проще.

0
ответ дан 3 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: