Синглтон класс против сериализованного объекта, CSharp - PullRequest
0 голосов
/ 15 июля 2010

Я строю инструмент.У меня есть класс сбора, который хранит данные, собранные из файлов в сети.(Почему? Потому что чтение из сетевых файлов занимало больше времени, чем чтение всех данных за один раз и сохранение данных в объекте) Мне нужно использовать один и тот же экземпляр в различных классах.
Я просмотрел все «за» и «против» Singleton Classes и решил использовать его, так как чувствовал, что передача сериализованного объекта моего класса Collection не является хорошей идеей.

Это хорошая техника программирования?или есть лучшее решение.Я могу предоставить более подробную информацию, если мне неясно

Спасибо,
- Ивар
PS: Я не уверен, если это уже было задано на SO, пожалуйста, направьте меня к нужному сообщению, еслиДа.

Ответы [ 3 ]

3 голосов
/ 15 июля 2010

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

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

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

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

1 голос
/ 15 июля 2010

Синглтон не плохая модель, когда это желаемое поведение. Однако не следует реализовывать Singleton в самом классе.

Скорее, используйте Инверсию Контроля , например Guice . Затем потребитель вашего класса может определить его жизненный цикл (независимо от того, является он одиночным или нет).

0 голосов
/ 15 июля 2010

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

У меня к вам два вопроса:

  1. Вы знаете, насколько большой / тяжелый ваш класс мог стать? Так как он будет собирать данные, это может стать очень тяжелым.

  2. Когда приложение закроется, будет вам нужно сохранить собранный данные в БД или какой-то кэш?

...