Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: <ИΘZIЭ(ŦB> en 13 Marzo 2011, 20:19 pm



Título: ¿Cómo puedo estructurar mi librería de clases en sublibrerías? [SOLUCIONADO]
Publicado por: <ИΘZIЭ(ŦB> en 13 Marzo 2011, 20:19 pm
Qué tal compañeros. Saludos.
Me paso por aquí de nuevo a ver si pueden ayudarme con una nueva duda.
Resulta que estoy creando mi librería de controles en un nuevo proyecto tipo Class Library. Ahora bien, después de ir creando controles he tenido que crear también métodos globales que los diferentes controles usan. No obstante, dichos métodos no son exclusivos para mis controles, sino funciones útiles que puedo usar en diferentes casos. En vista de eso, empecé a sentir la necesidad de estructurar mi librería en sublibrerías a fin de clasificarlas por categorías, tal cómo están las librerías de Microsoft. Así pues, ya no quiero que mis clases de controles y las de métodos formen parte de la misma librería base, sino de otras sublibrerías. Por ejemplo, quiero hacer una sublibrería Controls y otra Methods, y asignar todos mis controles a la clase Controls y los métodos a Methods. Así, al cargar controles de mi librería en un formulario X quedaría así: Friend WithEvents MyTextBox1 As MyLibrary.Controls.MyTextBox, en vez de: Friend WithEvents MyTextBox1 As MyLibrary.MyTextBox.
¿Se entiende la idea? ¿Cómo lo hago?


Título: Re: ¿Cómo puedo estructurar mi librería de clases en sublibrerías?
Publicado por: [D4N93R] en 13 Marzo 2011, 21:17 pm
La respuesta son los namespace.

Artículo muy bueno en inglés:

http://msdn.microsoft.com/en-us/library/ms973231.aspx

No tan bueno, pero en español:

http://www.mundoprogramacion.com/colabora/NET2005/Percynet_Arquitectura_namespaces_NET.htm


Título: Re: ¿Cómo puedo estructurar mi librería de clases en sublibrerías?
Publicado por: <ИΘZIЭ(ŦB> en 15 Marzo 2011, 01:58 am
Ciertamente muy bueno el primer artículo. Antes había probado con el Namespace pero no sabía que había que escribirlo en cada clase; pensaba que se hacía en un sólo código. Gracias de verdad por la ayuda.

Para los que entran al tema buscando lo mismo que yo, pues les comento que para hacer la correcta estructuración de las clases estas deben estar dentro de un espacio de nombre  (Namespace), que no es otra cosa que una categoría. Si tienen diferentes clases pertenecientes a una misma categoría, cada una de esas clases debe estar dentro de un Namespace con el mismo nombre. Por ejemplo, en mi caso tengo un proyecto tipo Class Library en el que tengo varios controles de usuario (UserControl), pero también algunos módulos y métodos. Por ello, para diferenciar unos de otros, sencillamente encerré cada clase así:

Namespace Controls

Public Class MyControlX

'Aquí el código de la clase

End Class

End Namespace

Eso hice con cada control que tengo en el proyecto y listo: ahora todos pertenecen al espacio de nombre Controls, como quería. Claro está, eso requirió actualizar algunas líneas de código que hacían alusión al nombre completo anterior de algunos controles internos, pero que cambiaron al asignarlos al Namespace. Por ejemplo, antes el nombre era MyLibrary.MyControlX, y tuve que actualizarlo a MyLibrary.Controls.MyControlX; eso sólo en algunos UserControls que tenían otros UserControls como componentes. Luego de eso, todo quedó perfecto. :)

Gracias una vez más por la ayuda prestada.


Título: Re: ¿Cómo puedo estructurar mi librería de clases en sublibrerías?
Publicado por: [D4N93R] en 15 Marzo 2011, 19:56 pm
Si, lo mejor de todo es que puedes tener Clases en el mismo namespace en diferentes assemblies. Es decir:

Tengo ClaseA y ClaseB, AMBOS dentro del namespace "NS1", y ClaseA está dentro de lib1.dll y ClaseB está dentro de lib2.dll

Cuando referencian ambos DLL es totalmente transparente para el usuario de que cada clase esté en diferentes assemblies.

Un saludo!


Título: Re: ¿Cómo puedo estructurar mi librería de clases en sublibrerías?
Publicado por: <ИΘZIЭ(ŦB> en 17 Marzo 2011, 03:43 am
Oye eso sí no lo sabía. Así puedo clasificar aun mejor mis librerías de controles, en caso de ser necesario.

Gracias otra vez!  ;-)