Atualmente, estou com 4 meses de estágio e, ao revisar meu código, meu chefe não gostou de ter mantido um objeto específico local para vários métodos em algumas classes separadas em uma assemblagem. Ele não gostou que eu fosse criado um novo objeto a cada vez e, em vez disso, me disse para criar um único objeto que pode ser acessado de qualquer lugar. Portanto, tive que criá-lo como um objeto estático dentro de uma classe estática e simplesmente referenciá-lo a partir daqui, quero usá-lo!
Como você lidaria com isso, como eu só tenho programado profissionalmente por 4 meses!
teamwork
coding-standards
singleton
Darren Young
fonte
fonte
Respostas:
Se um objeto é suficiente, criar um objeto toda vez é um desperdício, e aqui seu chefe pode estar certo.
O problema é o acesso adequado a esse objeto. Um método de fábrica com visibilidade adequada que sempre retorna esse objeto estático é a primeira solução que vem à mente. Outros certamente existem.
fonte
Não posso comentar seu caso específico, mas usar variáveis globais às vezes é uma boa solução. A classe System do Java está cheia de variáveis globais estáticas.
Mas, em geral, se você pensa que está certo e que seu chefe está errado, por que não pede que ele explique por que ele acha que uma variável global é uma solução melhor? Um simples "eu não gosto" é tão vago quanto "variáveis globais são más". Você deve exigir mais do seu chefe!
Se ele não pode dar motivos para sua posição e você pode dar motivos para sua posição, ou vice-versa, é uma boa oportunidade de aprendizado. Se vocês dois podem justificar suas posições, provavelmente é uma questão de gosto - ou questão de experiência: seu chefe deve estar programando profissionalmente há mais de quatro meses, eu acho?
fonte
java.lang.System
contém exatamente três variáveis globais e, para cada uma delas, existe um método para configurá-lo corretamente. MasSystem
está cheio de métodos estáticos que retornam objetos globais, e não há exatamente nada de errado nisso, não se pode argumentar.System
simplifica, digamos, 99,9% dos casos de uso ao custo de causar problemas nos 0,1% restantes. Não existe uma resposta "certa" para saber se 0,1% vale ou não a complexidade extra.Como alguém em sua posição, o máximo que você pode fazer é aprender. Se o objeto é essencialmente uma constante (ou seja, não pode mudar e não mantém o estado), seu chefe pode estar certo. Não há mal nenhum em ter um objeto constante estático. Afinal, quantas definições de PI existem?
Algumas pessoas defendem a mentalidade de "nenhum objeto global" ao ponto de ferver religioso. Isso ocorre por um de dois motivos: eles têm sido difíceis de rastrear bugs ou fragilidade do sistema devido ao uso excessivo de variáveis / objetos globais, ou ouviram dizer que é ruim e não conseguem pensar por si mesmos. Pessoalmente, eu pertenço ao grupo de pessoas que foram duramente atingidas pela fragilidade e difíceis de rastrear bugs - mas também aprendi um pouco de equilíbrio aqui.
Se eu estivesse no seu lugar, eu faria o que o chefe disser - afinal, é o alvo dele na linha. Então eu assistia e via os efeitos dessa escolha ao longo do tempo. Esta é uma ferramenta de aprendizado eficaz.
fonte
Dependendo da situação específica, uma variável global pode ser a melhor solução. Na programação incorporada, os globais não estão ocupando espaço na pilha e, por esse motivo, é uma boa escolha.
Globais ou não, achei uma boa prática colocar um prefixo nos globais. Isso fará com que outros programadores pesquisem seu código no Google sobre o impacto se eles mexerem com ele.
fonte
Talvez o que seu chefe queria era que você usasse o Padrão Singleton. É uma prática muito boa quando você precisa acessar um determinado objeto de várias instâncias.
Aqui está um link para a explicação das wikipedias
fonte
good practice
seria usar en.wikipedia.org/wiki/Dependency_injection # #