Глобальные кадры данных - хорошо или плохо

У меня есть программа, которая загружает миллионы строк в фреймы данных, и я объявляю их глобальными, поэтому все мои функции (> 50) могут использовать их, как я использовал базу данных в прошлом. Я читал, что использование глобалов — это плохо, и из-за отображения памяти для него медленнее использовать глобалы.

Мне нравится спрашивать, плохи ли глобальные переменные, какова будет хорошая практика? передача> 10 фреймов данных вокруг функций и вложенных функций также не кажется очень чистым кодом. В последнее время программа становится громоздкой, так как разные функции также обновляют разные ячейки, вставляют и удаляют данные из фреймов данных, поэтому я думаю о том, чтобы обернуть фреймы данных в класс, чтобы сделать его более управляемым. Это хорошая идея?


person desmond    schedule 22.07.2016    source источник
comment
Немного сложно давать очень целенаправленную обратную связь, не видя вашего фактического кода. Вы можете опубликовать несколько своих функций на codereview.stackexchange.com, чтобы получить более конкретные предложения.   -  person Randy    schedule 22.07.2016


Ответы (1)


Да. Вместо использования глобальных переменных вы должны обернуть свои данные в объект и вместо этого передать этот объект своим функциям (см. Внедрение зависимостей).

Обертывание его в объект вместо использования глобального будет:

  1. Позволяет вам проводить модульное тестирование вашего кода. Это абсолютно самая важная причина. Использование глобальных переменных сильно усложнит тестирование вашего кода, поскольку невозможно протестировать какой-либо из ваших кодов изолированно из-за его глобального характера.
  2. Выполняйте операции над своим кодом безопасно, не опасаясь случайных ошибок изменчивости
  3. Остановите ужасные ошибки параллелизма, которые случаются, потому что все является глобальным.
person Henry Dang    schedule 22.07.2016
comment
да, я столкнулся с этим сейчас. как бы вы их завернули? каждый класс для каждого фрейма данных? Вы предлагаете какую-либо стандартную структуру классов для управления кадрами данных? - person desmond; 22.07.2016
comment
Вы можете просто создать суперкласс с именем DataFrame и наследовать от него каждый тип фрейма данных. Просто реорганизуйте все ваши глобальные переменные в эти классы. Хотя это сломает весь ваш код, поскольку все они полагаются на глобальное присутствие, так что, вероятно, на изменение потребуется очень много времени. (По сути, вам придется все изменить.) - person Henry Dang; 22.07.2016
comment
Спасибо, я пойду выяснять, знаете ли вы какой-либо URL-адрес, который может привести меня к написанию такой структуры? это смущает, но весь мой код сейчас просто работает... - person desmond; 22.07.2016
comment
Тогда вам придется много читать, прежде чем вы сможете начать писать хороший проект ООП. Но в целом у вас должно быть хорошо, если вы следуете SOLID, en.wikipedia.org/ вики/SOLID_(объектно-ориентированный_дизайн) - person Henry Dang; 22.07.2016