Архитектура ASP.Net, специфичная для общих / статических функций - PullRequest
1 голос
/ 30 апреля 2010

Может ли кто-нибудь посоветовать в контексте приложения ASP.Net совместную / статическую функцию, общую для всех пользователей?

Если, например, у вас есть функция

Public shared function GetStockByID(StockID as Guid) as Stock 

Эта функция является общей для всех текущих пользователей вашего приложения? Или общая функция предназначена только для текущего пользователя и используется только в контексте ТОЛЬКО текущего пользователя?

Итак, более конкретно, мой вопрос заключается в следующем: помимо проблем параллелизма в базе данных, таких как блокировка таблиц, нужно ли мне заниматься проблемами потоков в общих функциях в приложении ASP.Net?

В моей голове; допустим, мое пространство имен приложения - MyTestApplicationNamespace. Каждый раз, когда новый пользователь подключается к моему сайту, создается новый экземпляр MyTestApplicationNamespace, и поэтому все общие функции являются общими для этого экземпляра и пользователя, но НЕ общими для нескольких пользователей. Это правильно?

Ответы [ 2 ]

2 голосов
/ 30 апреля 2010

Ни один экземпляр пространства имен никогда не "создается" во время выполнения.Думайте об этом как о способе организации кода, как о каталоге на жестком диске.

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

Если вам нужен отдельный объект, который является общим для каждого пользователя, это можно сделать следующим образом:

     public class cApp
        {

                static readonly cDB _cDB = 
new cDB(ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString);


                public static cDB DB
                {
                    get
                    {
                        return _cDB;
                    }
                }

        }

Это создает экземпляр единственного объекта типа cDB при первом прикосновении к нему при сохранении потока.Он будет называться _cDB, который можно использовать в коде через свойство DB.Например:

cApp.DB.MyMethod();

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

0 голосов
/ 30 апреля 2010

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

Статические данные остаются между запросами (возможно, приложения могут быть сброшены). Как правило, для каждого запроса вы загружаете нужные объекты / данные и представляете их любым способом.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...