Pergunta

Eu li em vários lugares que ter variáveis ??com escopo global, ou seja, uma classe estática pública com membros estáticos, é considerado vai contra a filosofia do OO, e não é bom design. (Por exemplo, tenho visto comentários ao longo das linhas de: ". Se você estiver usando um global, você não está fazendo a coisa certa" ou palavras para esse efeito)

Mas, se você usar o mecanismo de definições fornecidas pelo Visual Studio, por exemplo, "Settings.Default.MySetting" etc, este está disponível globalmente em todo um aplicativo, então como isso difere de usar uma classe estática pública?

Além disso, os mesmos resultados podem ser alcançados usando um objeto singleton, mas isso também provoca várias opiniões, para dizer o mínimo.

As variáveis ??globais são tão útil, (Módulo VB, alguém?), Mas eu estou tentando me ensinar como fazer isso malarky OO corretamente, então, se as variáveis ??globais mau cheiro de um ponto OO de vista, o que é uma alternativa?

Eu estou particularmente interessado em pareceres da utilização da funcionalidade 'Definições' das pessoas. É este um bom design OO considerados?

Obrigado por quaisquer comentários.

Foi útil?

Solução

Os métodos estáticos e outros membros não são uma prática ruim em seu próprio direito. É justo que as pessoas menos familiarizadas com conceitos OO tendem a maca do seu código com métodos estáticos, propriedades e campos em toda parte, sem perceber quais são as consequências.

Geralmente, para coisas como definições de configuração, classes auxiliares e de serviços públicos, fábricas abstratas, singletons etc., ter membros estáticos é perfeitamente aceitável.

Outras dicas

Em C # você vai ter um tempo difícil ir contra o bom design OO porque você não pode ficar longe de OO. Não é como C ++, onde você pode misturar e combinar estruturado com programação OO - o reino em que estes tipos de argumentos muitas vezes ocorrem. membros estáticos em uma classe são OO. Assim são Configurações gerados da Microsoft porque a geração de código cria OO encapsulamento para eles ou, pelo menos, um "container objeto" em torno deles. Então eles são variáveis ??não globais porque isso não existe em C # - eles são apenas membros estáticos em classes -. Nada lá que é não-OO

Se o argumento é sobre Singleton vs membros estáticos então ele pitting um argumento OO contra outro argumento OO.

Em seguida, há sempre o ponto de vista filosófico vs ponto de vista prático. Na maioria dos reinos do ponto de vista filosófico ideal a ser implementado não é realmente vale a pena por conta própria, exceto para o estudo acadêmico. mundo real precisa de soluções reais, soluções mistas.

A classe estática pública ou membro nem sempre é uma má idéia (mesmo se não é perfeitamente OO). Muitos projetos boa OO usar um membro estático público para coisas como madeireiros ou Configurações (como você apontar). Um bom exemplo de como fazer isso de uma maneira OO é o estática gateway .

As variáveis ??globais, como gotos, são algo que deve ser evitado por todos os iniciantes, mas são extremamente úteis para um programador avançado.

Eu diria que se você não se sentir confiante e você não tem um específico, motivo justificado por isso que é uma boa aplicação deles, não usá-los. OO mestre antes de recorrer de volta para variáveis ??globais.

O mecanismo Settings ... hmm ...

Eu olho para aqueles principalmente como parte do ambiente. Como o sistema operacional ou o tempo, mas para a aplicação. Eles não são realmente "variáveis" como você deseja declarar durante uma INIT.

No entanto, você poderia envolver um objeto ao redor deles e só acessá-los através desse objeto, em vez de lê-los sempre que eles eram necessários em tempo de execução. Eu não testei, mas é provavelmente uma lavagem de desempenho (ou negativa para lê-los crus se você não fizer uma boa gestão de memória).

Por fim, como aplicações de amadurecer, coisas como esta acabam ficando objetos embrulhados em torno deles de qualquer maneira. Minha regra é, sempre que eu começar a pensar, "nah, isso é muito simples, muito atômica, e não vai exigir um objeto ..." essa é a minha pista para torná-lo um objeto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top