Статические методы в ASP.NET

я немного смущен статическими методами в asp.net-страницах. Например, что, если я создаю статический Метод базы данных для вытаскивания Userdata из базы данных (что-то как UserDBHandler.getUser ()) - действительно ли безопасно назвать тот метод из веб-страниц? Разве новый поток не создается для каждого вызова страницы? И делает HttpContext. Текущий всегда возвращают контекст текущих пользователей, также - действительно ли безопасно назвать это от статических методов получить сессию текущих пользователей??

спасибо

9
задан 25 February 2010 в 06:31
поделиться

4 ответа

безопасно ли вызывать этот метод из на веб-страницах

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

Разве новая цепочка не создается для каждого вызова страницы

Да.

does HttpContext.Current always return the current-users context, so is it safe to call that from static methods to get the current-users session??

Да.

Если вы хотите быть пуристом, не рекомендуется полагаться на статические методы, поскольку они затрудняют тестирование вашего кода изолированно. Если класс A вызывает статический метод класса B, вы никогда не сможете протестировать класс A без тестирования / вызова B.

2
ответ дан 3 November 2019 в 01:55
поделиться

безопасно ли вызывать этот метод из внутри веб-страниц

Только если этот метод является реентерабельным. Пример с sql:

public static User GetUser(string username)
{
    using (var connection = new SqlConnection(ConnectionString))
    using (var command = connection.CreateCommand())
    {
        connection.Open();
        command.CommandText = "select name, username from users where username = @username";
        command.Parameters.AddWithValue("@username", username);
        using (var reader = command.ExecuteReader()) 
        {
            while (reader.Read())
            {
                return new User 
                {
                    Username = username,
                    Name = reader.GetString(0),
                }
            }
        }
        return null;
    }
}

И вызов в вашей ASPX странице:

var user = SomeClass.GetUser(Session["username"]);

И всегда ли HttpContext.Current возвращает контекст текущего пользователя, так что безопасно ли вызывать его из статических методов для получения текущего пользователя сессию?

Да, HttpContext.Current можно безопасно использовать для получения текущего HTTP контекста. Но я бы предложил вам не вызывать HttpContext.Current в вашем методе доступа к БД. Просто передайте то, что необходимо, в качестве аргумента, чтобы ваша ASPX-страница при вызове метода безопасно прочитала сессию и передала необходимые параметры.

Замечание и личный совет: не используйте статические методы для доступа к данным. Вызываемый код, использующий статические методы, практически невозможно юнит-тестировать.

8
ответ дан 3 November 2019 в 01:55
поделиться

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

0
ответ дан 3 November 2019 в 01:55
поделиться

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

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

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