Действительно ли статические методы подходят для Linq К SQL DAL?

Я использую Linq для SQL для моего DAL и услышал различные вещи об использовании статических методов в веб-приложении (относительно проблем поточной обработки/параллелизма). В данный момент я создал тест DAL, который, кажется, функционирует прекрасный. Однако есть ли какие-либо проблемы со способом, которым я создал его, так как это статично?

    public static class TestDAL
    {


        public static bool GetUserAddress(string username)
        {
            testDBDataContext dbContext = new testDBDataContext();
            //Linq code goes here

        }


        public static void InsertUserNumber(int userID)
        {
            testDBDataContext dbContext = new testDBDataContext();
            //...
            dbContext.UserDetails.InsertOnSubmit(nUser);
            dbContext.SubmitChanges();

        }

       //etc... All the methods are created in the same way 


    }

Действительно ли этот метод прекрасен для веб-приложения или там будет проблемами в продуктивной среде?

Спасибо.

6
задан p.campbell 10 February 2010 в 17:17
поделиться

3 ответа

Лично я бы избегал статических методов, так как это сделает этот код гораздо труднее проверить вокруг. При тестировании кода, который его использует, вы не сможете легко выдумать DAL. Обратите внимание, что это не уникально для уровней LINQ или доступа к данным, это просто функция кода, являющегося классовым методом, а не методом экземпляра.

-121--4293783-

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

Вероятно, вы будете запрашивать некоторые веб-службы, файлы или базы данных, запускать некоторые локальные алгоритмы для данных, собранных из различных источников, и создавать некоторые табличные или структурированные выходные форматы (xml, json и т.д.).

Для этого я предлагаю использовать инструменты workflow-процесса, такие как Knime (или коммерческое решение, такое как Inforsense KDE , Pipeline pilot от Accelrys или Snaplogic , поскольку они позволяют запрашивать данные в различных форматах и местоположениях (rdbms, плоские файлы, веб-службы), запускать алгоритмы и создавать мощные веб-приложения, которые позволяют легко публиковать рабочие процессы пользователям и позволять им взаимодействовать в определенных точках).

Если ваш прототип «растет» и вам приходится создавать больше функциональных возможностей поверх данных, выводимых вашими рабочими процессами, и если выход вашего прототипа вряд ли будет меняться каждый день, то это разумное решение сохранить подмножество результатов в базе данных. Это позволяет подключать мощные средства создания отчетов, такие, как SunObjects, Crystal reports, jasper reports или любое другое доступное решение для создания отчетов, и показывать пользователям данные в лучшей форме, чем электронная таблица или csv-файл.

Наконец, некоторые рамки разработки сделают ваш выбор более очевидным: если вы создадите веб-приложение с использованием рамки MVC, вероятно, ваши данные будут находиться в RDBMS (но, пожалуйста, не помещайте геномные последовательности в столбец таблицы: -)).

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

-121--2083427-

Если статические методы не используют общее состояние (состояние уровня класса или другое глобальное состояние), они сами по себе не будут вызывать проблем, выполняемых в многопоточной среде. При каждом вызове статического метода создаются копии собственных локальных переменных.

5
ответ дан 10 December 2019 в 00:38
поделиться

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

2
ответ дан 10 December 2019 в 00:38
поделиться

Лично я бы избегал статических методов, так как это значительно усложнит тестирование этого кода. Вы не сможете легко имитировать DAL при тестировании кода, который его использует. Обратите внимание, что это не уникально для LINQ или уровней доступа к данным, это просто функция кода, являющегося методом класса, а не методом экземпляра.

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

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