Являются ли статические классы и методы плохими? Глобальные переменные не одобряются? - PullRequest
2 голосов
/ 31 декабря 2010

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

Также я использую утилиту-синглтон-класс для общих (единичных) «глобальных данных». Я хочу иметь хороший дизайн, но не одобряют ли они?

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

Так что у моего синглтон-класса есть что-то вроде

List<MyCustomObject> SomeList

а у моего статического класса

static void LoadData()
foreach(data in database something or other)
singletonClass.SomeList.Add()

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

Это хорошая реализация? Это то, как вы это закодируете?

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

Это не очень хорошо. Но я не могу думать, как сделать это по-другому, как ты.

Ответы [ 3 ]

2 голосов
/ 31 декабря 2010

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

Проблема в том, что необходимость вызова вашей функции LoadData() не является сам-evident.Сравните вашу ситуацию с описанной в статье, и я думаю, вы увидите некоторые параллели.

0 голосов
/ 31 декабря 2010

Синглтоны - это одно, но статическое - это еще один очень большой.

ООП или нет, статические переменные имеют много недостатков, но мало удобны при кодировании.

  • Не удается определить точное время выделения, срок службы
  • Не может хорошо работать в многопоточном
  • Будущая проблема расширения программы

...

0 голосов
/ 31 декабря 2010

Статика и синглтоны несколько недовольны. Но только так же, как начало предложения с «но» - плохо при чрезмерном использовании, но иногда это то, что работает лучше всего.

В вашем примере, почему есть отдельные классы, один синглтон и один статический? Синглтон во многом эквивалентен классу, содержащему только статические данные и методы. Если у вас уже есть синглтон, я бы сказал, что вы должны добавить методы для загрузки данных в него, а не в отдельный класс. Класс со статическими методами был бы более подходящим, если, скажем, у вас есть код утилиты, общий для всех ваших сохраненных типов данных.

(Кроме того, я бы не стал слишком беспокоиться о том, что такое OOPey, а что нет. Избыточное обучение в слепой службе принципов ООП может быть серьезной проблемой, если говорить о том, кто должен был пройти через кодовую базу Eclipse…) *

...