Это вопрос со многими ответами - мне интересно узнать, что другие считают "лучшей практикой".
Рассмотрим следующую ситуацию: у вас есть объектно-ориентированная программа, которая содержит одну или несколько структур данных, которые необходимы многим различным классам. Как сделать эти структуры данных доступными?
-
Вы можете явно передавать ссылки, например, в конструкторах. Это "правильное" решение, но это означает дублирование параметров и переменных экземпляра по всей программе. Это затрудняет внесение изменений или дополнений в глобальные данные.
-
Вы можете поместить все структуры данных внутри одного объекта и передать ссылки на этот объект. Это может быть либо объект, созданный именно для этой цели, либо он может быть "основным" объектом вашей программы. Это упрощает проблемы (1), но структуры данных могут или не могут иметь ничего общего друг с другом, и сбор их вместе в одном объекте довольно произволен.
-
Вы можете сделать структуры данных "статическими". Это позволяет вам ссылаться на них непосредственно из других классов, без необходимости передавать ссылки. Это полностью исключает недостатки (1), но явно не OO. Это также означает, что может быть только один экземпляр программы.
Когда есть много структур данных, все из которых требуется для множества классов, я склонен использовать (2). Это компромисс между чистотой и практичностью OO. Что делают другие люди? (Для чего это стоит, я в основном из Java-мира, но это обсуждение применимо к любому языку OO.)