В настоящее время я прохожу стажировку в течение 4 месяцев, и при просмотре моего кода моему боссу не понравилось, что я сохранил определенный объект локально для нескольких методов в нескольких отдельных классах в одной сборке. Ему не понравилось, что я каждый раз создавал новый объект, и вместо этого сказал мне создать один объект, к которому можно получить доступ из любого места. Поэтому мне пришлось создать его как статический объект внутри статического класса и просто ссылаться на него отсюда, я хочу его использовать!
Как бы вы справились с этим, ведь я профессионально программирую только 4 месяца!
teamwork
coding-standards
singleton
Даррен Янг
источник
источник
Ответы:
Если одного объекта достаточно, создание объекта каждый раз является пустой тратой, и здесь ваш босс может быть прав.
Проблема в правильном доступе к этому объекту. Подобный фабрике метод с надлежащей видимостью, который всегда возвращает этот статический объект, является первым решением, которое приходит на ум. Другие, безусловно, существуют.
источник
Я не могу прокомментировать ваш конкретный случай, но использую глобальные переменные является иногда хорошим решением. Класс System Java полон статических глобальных переменных.
Но в целом, если вы считаете, что правы, а ваш босс неправ, то почему бы вам не попросить своего босса объяснить, почему он считает глобальную переменную лучшим решением? Простое «мне это не нравится» столь же расплывчато, как «глобальные переменные - зло». Вы должны требовать большего от своего босса!
Если он не может обосновать свою позицию, а вы можете обосновать свою позицию или наоборот, тогда это хорошая возможность для обучения. Если вы оба можете оправдать свои позиции, то это, вероятно, дело вкуса или опыта: ваш босс, должно быть, профессионально программировал более 4 месяцев, я думаю?
источник
java.lang.System
содержит ровно три глобальные переменные, и для каждой из них есть метод, чтобы правильно установить его. НоSystem
он полон статических методов, которые возвращают глобальные объекты, и в этом нет ничего плохого, спорить не могу.System
упрощает, скажем, 99,9% случаев использования за счет возникновения проблем в оставшихся 0,1%. Не существует «правильного» ответа на вопрос, стоит ли этот 0,1% дополнительной сложности.Как кто-то на вашей должности, самое большее, что вы можете сделать, это учиться. Если объект по сути является константой (то есть он не может измениться и не поддерживает состояние), тогда ваш босс может быть прав. Нет никакого вреда в наличии статического постоянного объекта. В конце концов, сколько определений PI существует?
Некоторые люди защищают мышление «без глобальных объектов» до такой степени, что они становятся религиозными. Это по одной из двух причин: им было трудно отслеживать ошибки или хрупкость системы из-за чрезмерного использования глобальных переменных / объектов, или они слышали, что это плохо, и они не могут думать сами. Лично я попадаю в группу людей, которые сильно пострадали от хрупкости и отследили ошибки - но я также выучил некоторый баланс здесь.
Если бы я был на твоем месте, я бы пошел дальше и сделал бы то, что говорит босс - это его задница в конце концов. Затем я бы посмотрел и увидел результаты этого выбора с течением времени. Это эффективный инструмент обучения.
источник
В зависимости от конкретной ситуации, глобальная переменная может быть лучшим решением. Во встроенном программировании глобальные переменные не занимают место в стеке и поэтому являются хорошим выбором.
Глобалы или нет, я считаю хорошей практикой ставить префикс для глобалов. Это заставит других программистов погуглить ваш код, зная о влиянии, если с ним возится.
источник
Возможно, ваш босс хотел, чтобы вы использовали шаблон Singleton. Это очень хорошая практика, когда вам нужно получить доступ к определенному объекту из нескольких экземпляров.
Вот ссылка на объяснение википедии
источник
good practice
будет использовать en.wikipedia.org/wiki/Dependency_injection