¿Tener muchas declaraciones de uso / importación indica mal diseño u olor a código?

13

Por lo general, veo algunos usando la declaración en la parte superior del archivo de clase. Ejemplo:

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

Pero en un proyecto en el que estoy trabajando, en varias ocasiones veo 20 o más usos / importaciones en un archivo de clase. ¿Es este un mal diseño? Parece ser que las clases diseñadas para hacer una cosa solo deberían depender de unos pocos componentes.

Jon Raynor
fuente
1
Visual Studio tiene una opción para eliminar usingdeclaraciones no utilizadas . Es posible que desee ver cuántos de esos 20 están en uso real.
Dan Pichelman
@Dan: todos están en uso, ya que he usado ReSharper para eliminar los que no se usan.
Jon Raynor
¿Has intentado agregar un IoC, convertirlo a inyección de constructor y / o convertir algunos puntos de integración en lambdas en línea para ver si reducirá el número de usingdeclaraciones sin tener que aumentar el número de clases? Tenga en cuenta que aumentar el número de clases o archivos fuente aumentará la sobrecarga de administración del código fuente.
rwong el
2
IoC simplemente oculta el problema.
Telastyn
1
Algunas de esas cosas son casi solo parte del lenguaje y el estilo de programación que fomenta, como Collections.Generic y LINQ, por lo que no necesariamente me preocuparía por eso. Probablemente enfocaría mi atención en los demás. Probablemente, la mayoría de las clases no necesiten hacer IO directamente, por lo tanto, tal vez si se encuentra en todas partes, hay alguna combinación de responsabilidades o capas pobres, pero depende de la aplicación.
Erik Eidt

Respuestas:

21

Puede indicar un mal diseño, sí. Puede ser que la clase que está viendo esté haciendo demasiadas cosas, pero también puede significar que los espacios de nombres que está importando están realmente más acoplados de lo que implica la separación del espacio de nombres. Eso puede deberse a un exceso de ingeniería o abstracción excesiva, pero también podría ser un diseño que no se alinea bien con el uso.

Dicho esto, es un olor, a veces te lleva a algo malo, y a veces es solo una falsa alarma.

Telastyn
fuente
Creo que el verdadero "olor a código" sería si los espacios de nombres importados son todos, o en su mayoría, muy diferentes en propósito. Para ser honesto, rara vez he tenido más de 6 a 8 usingen un solo archivo C #.
Greg Burghardt
2
Me gustaría darle un segundo +1 si pudiera, ¡solo por usar el término "olor de código" correctamente!
Jörg W Mittag el
! @Greg - Estoy de acuerdo, generalmente los "usos" están relacionados. Creo que en este caso es un caso de abstracción porque alrededor de 15-20 de los "usos" provienen de espacios de nombres de aplicaciones y el resto de .NET Framework.
Jon Raynor
2

Una clase no debe ser más grande ni más pequeña de lo que se necesita para proporcionar una función deseada.

En una aplicación, tengo una clase de cifrado que tiene un trabajo: cifrar datos. Entre la funcionalidad principal, el registro y el manejo de excepciones, el entorno requiere 11 importaciones de espacios de nombres distintos para realizar este único trabajo.

Me es difícil decirme a mí mismo 'minimizar las importaciones'. O para juzgar el éxito de mi clase únicamente contando el número de espacios de nombres importados. No puedo usar esto justificadamente, de forma aislada, como una indicación del éxito de una clase. Para mí, 'importaciones' son los medios para el fin de la clase. Si el trabajo de la clase está bien definido, todo lo demás dentro del sistema de soporte, incluidas las importaciones, se encargará de sí mismo.

Paulstgeorge
fuente