Широкое использование коллекций и приложений? - PullRequest
0 голосов
/ 18 декабря 2009

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

У меня есть следующий класс:

 class UserDataCollection
    {
        List<UserData> Collection = new List<UserData>();
        UserData current;

        public UserData Current
        {
            get { return current; }
            set 
            {
                current = value;
            }
        }

        public UserDataCollection( UserData userdata )
        {
            this.current = userdata;
        }

        public void Add ( UserData item )
        {
            Collection.Add(item);
        }


    }

Теперь для каждого объекта UserData, который я хочу добавить, он будет создавать новый объект List каждый раз, когда я иду UserDataCollection datacoll = new UserDataCollection(userdata);

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

Это тогда хороший случай синглтона или просто создать объект в Application Init и использовать один и тот же объект повсюду?

Какая лучшая практика проектирования для чего-то подобного?

Ответы [ 5 ]

1 голос
/ 18 декабря 2009

Это зависит

Если это веб-приложение, вы можете создать свою коллекцию при запуске приложения и сохранить ее в свойстве Application HttpContext. Если нет, вы можете использовать контейнер Singleton или IoC и настроить его так, чтобы он всегда возвращал один и тот же экземпляр объекта.

P.S .: Если несколько потоков приложения будут работать одновременно, обязательно используйте блокировку перед обновлением коллекции.

Надеюсь, это поможет.

1 голос
/ 18 декабря 2009

Вы можете просто сделать список статичным. Тогда будет только одна коллекция.

0 голосов
/ 18 декабря 2009

Мне нравится идея синглтона здесь, если вам нужен только один для всего вашего приложения. Если вы используете это в приложении ASP.NET, вам нужно быть осторожным с Singletons, потому что static переменные похожи на сохранение данных в состоянии приложения ... что, вероятно, то, что вы хотите ... но не так легко заметно для внешний мир (проблема ремонтопригодности).

0 голосов
/ 18 декабря 2009

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

0 голосов
/ 18 декабря 2009

Подобные коллекции, очевидно, предназначены для нескольких объектов, поэтому вы можете создавать их экземпляры там, где вы создаете ... коллекцию объектов ... Если вы хотите использовать ctor, то он должен принимать в качестве параметра a ... коллекция или перечислимый набор этих объектов ...

 // Inheriting from List<UserData> eliminates need for most of your code
 class UserDataCollection: List<UserData>
 {        
      public UserDataCollection(IEnumerable<UserData> users)
      {
          foreach (UserData usr in users)
              Add(usr);
      }  
 }
...