.net - program - namespace c# que es
Espacios de nombres.NET (9)
De hecho, el entorno .Net le permite arrojar su código en el IDE / filesystem como espagueti contra una pared.
Sin embargo, eso no significa que signifique que este enfoque sea sensato. En general, es una buena idea seguir con el proyecto. Nombre de la carpeta. Método de clase que se mencionó anteriormente. También es una muy buena idea mantener todas las clases de un espacio de nombres en la misma clase.
En Java, puede hacer cosas como esta y obtener toda la "flexibilidad" que desee, pero las herramientas tienden a desalentarla. Honestamente, una de las cosas más confusas para mí al ser presentado al mundo de .Net fue cuán descuidado / inconsistente puede ser esto gracias a la orientación relativamente pobre. Sin embargo, es fácil organizar las cosas sensatamente con un poco de reflexión. :)
Mi experiencia es principalmente como Desarrollador Java, pero últimamente he estado trabajando en .NET. Así que he estado tratando de hacer algunos proyectos simples en casa para mejorar al trabajar con .NET. He podido transferir gran parte de mi experiencia en Java para trabajar con .NET (específicamente C #), pero lo único que realmente me ha dejado perplejo son los espacios de nombres.
Sé que los espacios de nombres son similares a los paquetes de Java, pero por lo que puedo decir, la principal diferencia es que con los paquetes de Java usan carpetas de archivos reales para mostrar la separación, mientras que en .NET no y todos los archivos residen en una sola carpeta y el espacio de nombre simplemente se declara en cada clase.
Encuentro esto extraño, porque siempre vi los paquetes como una forma de organizar y agrupar el código relacionado, lo que hace que sea más fácil de navegar y comprender. Dado que en .NET no funciona de esta forma, en horas extras, el proyecto parece más abarrotado y no tan fácil de navegar.
¿Me estoy perdiendo de algo? Tengo que ser. ¿Debería dividir las cosas en proyectos separados dentro de la solución? ¿O hay una mejor manera de mantener organizadas las clases y los archivos dentro de un proyecto?
Editar: Como Blair señaló, esta es prácticamente la misma pregunta que se hace aquí .
Los espacios de nombres son puramente semánticos. Si bien normalmente reflejan una estructura de carpetas, al menos cuando usan Visual Studio IDE, no es necesario.
Puede tener el mismo espacio de nombres al que se hace referencia en varias bibliotecas, feo pero verdadero.
Los espacios de nombres son una agrupación lógica, mientras que los proyectos son una agrupación física.
¿Porque es esto importante? Piensa en .NET 2.0, 3.0 y 3.5. .NET 3.0 es básicamente .NET 2.0 con algunos ensamblajes adicionales, y 3.5 agrega algunos ensamblajes adicionales. Así, por ejemplo, .NET 3.5 agrega el control DataPager
, que es un control web y debe agruparse en System.Web.UI.WebControls
. Si los espacios de nombres y las ubicaciones físicas eran idénticos, no podría ser porque están en un ensamblaje diferente.
Por lo tanto, tener espacios de nombres como entidades lógicas independientes significa que puede tener miembros de varios ensambles diferentes que están lógicamente agrupados porque están destinados a ser utilizados en conjunto.
(Además, no tiene nada de malo tener sus diseños físicos y lógicos bastante similares).
No puedo afirmar que sea una buena práctica, pero a menudo veo los archivos organizados en una jerarquía de directorios que refleja el espacio de nombres. Si se ajusta mejor a tu modelo mental del código, hazlo, no puedo pensar en ningún daño. El hecho de que el modelo .NET no haga cumplir las relaciones entre espacios de nombres, proyectos y estructura de directorios no significa que no pueda tener tales relaciones si así lo desea.
Estaría un poco receloso de dividir el código en más proyectos de los que necesita, ya que esto puede ralentizar la compilación y agregar un poco de sobrecarga cuando tiene que administrar varios conjuntos.
EDITAR: tenga en cuenta que esta pregunta es casi un duplicado de si las carpetas en una solución coinciden con el espacio de nombres?
Puede agregar carpetas a su solución para cada espacio de nombres. Si bien aún se compilará en un solo ejecutable, organiza tus archivos de origen y da (lo que creo que es) el efecto deseado?
Por lo general, agrego una carpeta para cada espacio de nombres en mi proyecto y los anilo según la misma jerarquía (MyApp.View.Dialogs, por ejemplo)
Sí, en el espacio de nombres .NET no depende del sistema de archivos ni nada más. Es una gran ventaja en mi opinión. Por ejemplo, puede dividir su código en diferentes conjuntos, lo que permite una distribución flexible.
Al trabajar en Visual Studio, IDE tiende a introducir un nuevo espacio de nombres cuando agrega una nueva carpeta al árbol del proyecto.
Aquí hay un enlace útil de MSDN:
Directrices de nombres de espacio de nombre
La regla general para nombrar espacios de nombres es usar el nombre de la compañía seguido del nombre de la tecnología y opcionalmente la característica y el diseño de la siguiente manera.
CompanyName.TechnologyName [.Feature] [. Design]
Por supuesto, puede usar espacios de nombres de la manera que le parezca más adecuada. Sin embargo, si va a compartir su código, le recomendaría seguir los estándares aceptados.
EDITAR :
Recomiendo encarecidamente a cualquier desarrollador .net que obtenga una copia de las directrices de diseño de Framework. Este libro lo ayudará a comprender cómo y por qué está diseñado .NET.
Siempre consideré que la organización de archivos fuente y la asignación de identificadores a clases y objetos son dos problemas distintos. Tiendo a mantener las clases relacionadas en grupos, pero no todos los grupos deben ser un espacio de nombres. Existen espacios de nombres (más o menos) para resolver el problema de conflictos de nombres: en lenguajes de espacios de nombres planos como C, no puede caminar dos pies sin tropezar con identificadores como MYCGetCurrentDate
o MYCGetCurrentDate
, porque el riesgo de un conflicto con otra función en un la biblioteca de terceros (o sistema) es mucho más pequeña. Si creó un paquete o espacio de nombres para cada separación lógica, obtendría (por ejemplo, Java) nombres de clase como java.lang.primitivewrapper.numeric.Integer
, que es bastante exagerado.
Una solución VS normalmente contiene uno o más proyectos. Estos proyectos tienen espacios de nombres predeterminados (generalmente el espacio de nombres es solo el nombre del proyecto). Normalmente, si agrega una carpeta dentro del proyecto, todas las clases que contiene se nombrarán de la siguiente manera:
DefaultNamespace.FolderName.ClassName
Por supuesto, puede cambiar el espacio de nombre predeterminado del proyecto y hacer que sus clases se denominen de la manera que desee.
En cuanto a cuándo / cómo dividir cosas en proyectos, es una cuestión de experiencia y / o preferencia. Sin embargo, debe dividir absolutamente todo en proyectos dentro de una solución, a fin de mantener su proyecto organizado. Si la gestión de demasiados ensamblajes resulta engorrosa (como sugirió Blair), siempre puede ILMerge sus ensamblajes en un solo ensamblaje. Lo bueno de ILMerge es que, aunque termines con un solo ensamblaje, todas tus clases conservan sus nombres originales completos.
También es importante recordar que una solución VS no tiene relación con el código, es decir. ellos no se construyen VS Solutions no es más que una forma de agrupar proyectos; son los proyectos que se construyen y se convierten en DLL.
Finalmente, VS le permite agregar carpetas "virtuales" en cualquier lugar de la solución. Estas carpetas no se asignan a una carpeta en el sistema de archivos, y solo se utilizan como otro medio para ayudarlo a organizar sus proyectos y otros artefactos dentro de la solución.
la diferencia es que los espacios de nombres .net no tienen mucho que ver con los paquetes java.
Los espacios de nombres .net son puramente para administrar el alcance declarativo y no tienen nada que ver con archivos, proyectos o sus ubicaciones.
es muy simple que todo lo que se declara en un espacio de nombre particular es accesible cuando se incluye un ''uso'' de ese espacio de nombres.
muy fácil.
la elección del nombre y si hay o no / cuántos ''.'' los separadores que uses dependen completamente de ti.
VS se predetermina a agregar .foldernames a sus espacios de nombres solo para intentar ser útil.
este artículo explica los espacios de nombres bastante bien: http://www.blackwasp.co.uk/Namespaces.aspx
También tiene una convención de nomenclatura de ejemplo hacia el final, ¡aunque su convención de nombre es su llamado! ;)
Dicho esto, la mayoría de los lugares en los que he trabajado y las personas con las que he trabajado comienzan con el nombre de la empresa, lo que es sensato, ya que distingue nombres de tipos para esa compañía (separados de otros, bibliotecas, proveedores, proyectos de código abierto, etc.)