Ter muitas instruções de uso / importação indica mau design ou cheiro de código?

13

Normalmente, vejo algumas instruções usando no topo do arquivo da classe. Exemplo:

using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;

Mas em um projeto em que estou trabalhando, em várias ocasiões vejo 20 ou mais utilizações / importações em um arquivo de classe. Esse design é ruim? Parece que as classes projetadas para fazer uma coisa devem depender apenas de alguns componentes.

Jon Raynor
fonte
1
O Visual Studio tem uma opção para remover usinginstruções não utilizadas . Você pode querer ver quantos desses 20 estão em uso real.
Dan Pichelman 23/03
@ Dan - Eles estão todos em uso, pois usei o ReSharper para eliminar os não utilizados.
22816 Jon Raynor
Você já tentou adicionar uma IoC, converter em injeção de construtor e / ou converter alguns pontos de integração em lambdas in-line para ver se isso reduzirá o número de usinginstruções sem precisar aumentar o número de classes? Lembre-se de que o aumento do número de classes ou arquivos de origem aumentará a sobrecarga de gerenciamento de código-fonte.
Rwong 23/03/16
2
IoC apenas oculta o problema.
Telastyn 23/03
1
Algumas dessas coisas são quase apenas parte da linguagem e do estilo de programação que ela incentiva, como Collections.Generic e LINQ, então eu não necessariamente me preocupo com elas. Eu provavelmente focaria minha atenção nos outros. A maioria das classes provavelmente não precisa fazer E / S diretamente, portanto, talvez se isso for encontrado em todos os lugares, há algumas responsabilidades conflitantes ou camadas ruins, mas isso depende do aplicativo.
Erik Eidt 23/03

Respostas:

21

Pode indicar um design ruim, sim. Pode ser que a classe que você está vendo esteja fazendo muitas coisas, mas também pode significar que os espaços para nome que você está importando são realmente mais acoplados do que a separação do espaço para nome implica. Isso pode ser por excesso de engenharia ou excesso de abstração, mas também pode ser apenas um design que não se alinha bem ao uso.

Dito isto, é um cheiro - às vezes leva a algo ruim, e às vezes é apenas um alarme falso.

Telastyn
fonte
Eu acho que o verdadeiro "cheiro do código" seria se os namespaces importados fossem todos, ou principalmente, muito diferentes de propósito. Para ser sincero, raramente tive mais de 6 a 8 usingem um único arquivo C #.
precisa
2
Gostaria de lhe dar um segundo +1, se pudesse, apenas por usar o termo "cheiro de código" corretamente!
Jörg W Mittag 23/03
! @ Greg - Eu concordo, geralmente os "usos" estão relacionados. Eu acho que, neste caso, é um caso de abstração, porque cerca de 15 a 20 dos "usos" provêm de espaços de nomes de aplicativos e o restante da estrutura .net.
Jon Raynor
2

Uma classe não deve ser maior nem menor do que o necessário para fornecer uma função pretendida.

Em um aplicativo, tenho uma classe de criptografia que possui um trabalho: criptografar dados. Entre a funcionalidade principal, o log e o tratamento de exceções, o ambiente requer 11 importações de namespace distintas para executar esse trabalho.

É difícil para mim dizer 'minimizar as importações'. Ou para julgar o sucesso da minha turma apenas contando o número de namespaces importados. Não posso justificadamente usar isso isoladamente como uma indicação do sucesso de uma classe. Para mim, 'importações' são os meios para o fim da classe. Se o trabalho da turma for bem definido, todo o resto do sistema de suporte, incluindo as importações, cuidará de si mesmo.

Paulstgeorge
fonte