C, дизайн: удаление глобальных объектов - PullRequest
6 голосов
/ 09 июля 2011

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

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

  • a) Сохранить объект конфигурации глобальным (самое простое, хотя и не совсем решение)

  • b) Храните указатели везде, где они нужны (достаточно просто, хотя это и трата памяти, поскольку это понадобится некоторым небольшим структурам старых старых данных).

  • c) Создание фабрик для PODтипы, которым нужен доступ к опциям, и которые фабрика выполняет все операции над ними.

Из моих идей только (с) звучит логично, но я не хочу без необходимости усложнятьсостав.Что бы вы, ребята, сделали?

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

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 09 июля 2011

Я должен согласиться с @Carl Norum: нет ничего плохого в настройке глобальной конфигурации, которую вы сейчас имеете.Вы говорите, что каждый "получил что-то из этого".Как вы знаете, проблема с глобалами возникает, когда все пишут в их.В вашем случае информация о конфигурации действительно нужна глобально, поэтому заслуживает быть глобальным.

Если вы хотите сделать его немного более изолированным и защищенным - чуть менее глобальным - тогда почему бы не добавить некоторые процедуры чтения / записи.

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

Итак, суть: если все естественноglobal затем сделайте глобальным и не беспокойтесь об обычной широко распространенной мудрости, которая в основном верна, но может быть неправильной в вашем приложении.Быть всегда связанным с правилами / пропагандой, которые выкладывают учителя CS, является, по моему мнению, идеальным примером глупой последовательности.

2 голосов
/ 09 июля 2011

Глобальные переменные потрясающие. Потратьте свое время на то, чтобы что-то сделать, а не проводить рефакторинг без причины. Каждая компания, в которой я работал, использует их интенсивно .

Спросите себя, действительно ли вы что-то получаете, перемещая это к объекту, который вы везде проходите. Можете также спасти себя от дополнительной сложности ..

0 голосов
/ 09 июля 2011

Перейти к B, если профилирование не доказывает, что это проблема.На большинстве машин память, необходимая для хранения указателя, очень, очень тривиальна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...