• Привет, Гость!
  • Войти
  • Регистрация
  • Записи
  • Форумы
  • Люди
  • Файлы
  • Работа
  • Технологии

Правильно ли организован доступ к глобальным данным

Все форумы  Поиск  Правила  Помощь 
 Активные темы  Темы без ответов
Привет, гость! Войти
Форумы GotDotNet.Ru » Архитектура приложений » Правильно ли организован доступ к глобальным данным
Страницы: 1
RSS
Правильно ли организован доступ к глобальным данным, Например, нужно из большинства объектов читать свойства сессии
VladDV
Сообщений: 52 Регистрация: 13.09.2008
#1
28.02.2010 16:35
Привет всем!

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

public class TestService
{
   private static string name;

   public static string Name
   {
      get
      {
         return name;
      }
   }

   public TestService(string name)
   {
      TestService.name = name;
   }
}

public class TestClient
{
   public void PrintGlobalValue()
   {
      Console.WriteLine(TestService.Name);
   }
}

class Program
{
   static void Main(string[] args)
   {
      TestService testService = new TestService("Hello, world!");
      TestClient testClient = new TestClient();

      testClient.PrintGlobalValue();

      Console.ReadLine();
   }
}


Насколько правильным будет использовать такой подход?
 
 
newline
Сообщений: 18 Регистрация: 30.06.2008
#2
31.03.2010 12:13
VladDV, Я использую патерн Registry для доступа к общим объектам.
NewLineStudio.ru - Разработка программного обеспечения
 
 
sanchez911
Сообщений: 157 Регистрация: 04.10.2006
#3
03.04.2010 11:35
Посмотри еще паттерн Singleton. Это более продвинутый аналог статических аттрибутов и методов.
P.S. Ничего, я тоже когда с PHP переходил на .Net, никак не мог привыкнуть к классам и много фигашил в статических методах :) Но потом потихоньку как-то все перешло на нормальные классы и теперь жизни без них не вижу :)
 
 
xelibrion
Сообщений: 105 Регистрация: 07.11.2007
#4
07.04.2010 17:47
Господа, одумайтесь! Статические классы и глобальные объекты - зло. Для вашего случая я бы рекомендовал обернуть сессию в SessionFactory, которую и передавать объектам-потребителям посредством IoC контейнера.
 
 
 
Страницы: 1
Форумы GotDotNet.Ru » Архитектура приложений » Правильно ли организован доступ к глобальным данным
О сайте   Свяжитесь с нами   Версия для печати
Работает на 1С-Битрикс: Управление сайтом ASP.NET  |  Хостинг на Parking.Ru