FairyFox5700
@FairyFox5700

Как сделать DataSet не статической?

У меня есть класс DataSet который сохраняет экземпляры класса.

public DataSet()
{
    Songs = new List<Song>();
    Albums = new List<Album>();
    Artists = new List<Artist>();
    Groups = new List<Group>();
    Payments = new List<Payment>();
    WordAuthors = new List<WordAuthor>();
    SongCharacteristicss = new List<SongCharacteristic>();
    MusicAuthors = new List<MusicAuthor>();
    Clients = new List<Client>();
}


Они в свою очередь берутся с текстового файла с помощью рефлексии.
Далее этот класс DataSet должен использоваться в программе, играет роль такой себе базы данных в оперативной памяти.
Насколько это плохо использовать его как статический

private static readonly DataSet dataSet = new DataSet();
public static DataSet DataSet
{
    get
    {
        return dataSet;
    }
}


И как лучше оставить его статическим или как-то по другому?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
shai_hulud
@shai_hulud
Глобально доступное состояние это удобно, ведь в любом месте к нему можно обратиться. На этом плюсы заканчиваются. Из минусов:
- Использование из "любых мест" повышает связанность кода (будет не так легко заменить этот DataSet)
- Это невозможно тестировать т.к. параллельно запущенные тесты будут мешать друг другу, последовательно запущенные тесты будут видеть состояния предыдущих тестов и могут рандомно фейлиться/проходить.
- У глобального состояния не очевидно время жизни (когда я в методе Main оно уже загрузилось? оно не мертво ли когда я в Finalize()?). Не понятно что будет когда состояние сломается.
- Глобальное состояние должно быть потокобезопасно, иначе кто-то в колбеке начнет его менять и оно сломается.

Самый простой вариант это создать этот DataSet на старте приложения и прокидывать аргументом куда нужно.
Другой вариант это организовать сервисы и через DI (или руками) прокидывать их в компоненты/формы/сервисы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы