Creación de varios_ proyectos_ en_una_solución_visual _studio_2010
1. Guía de laboratorio
Creación de varios
proyectos relacionados en
una aplicación Web Visual
Separación de las capas de presentación y negocios
Adriana Cabella
01/10/2012
2. Creación de varios proyectos relacionados en una aplicación Web Visual 2
PARTE 1 - OBJETIVO:
Organizar la solución separando las capas de interfaz de usuario (presentación) y de entidades del
dominio (reglas del negocio) creando diferentes proyectos dentro de la misma solución.
a. Crear una nueva aplicación Web.
La solución se llamará HerenciaAnimales, lo mismo que el proyecto de tipo Aplicación Web.
b. Si no está viendo en el explorador de soluciones la rama correspondiente a la solución (solo
ve el proyecto), configurarlo:
Herramientas > Opciones >Proyectos y soluciones >Mostrar Solución siempre.
(Si la casilla “Mostrar todas las configuraciones” no está marcada, tildarla).
Tildar la opción “Mostrar solución siempre” y aceptar.
2. En el explorador de soluciones, botón derecho sobre el nombre de la solución > Agregar > Nuevo
Proyecto. Seleccionar en las plantillas Visual C# y a la derecha Class Library (Biblioteca de clases).
Ponerle como nombre EntidadesDominio y aceptar.
3. Creación de varios proyectos relacionados en una aplicación Web Visual 3
3. En el explorador de soluciones se habrá agregado el proyecto a la solución.
4. Ejecutar con F5. Si aparece un cuadro de diálogo avisando que no se puede ejecutar un proyecto con
resultados “Bibilioteca de clases”, observar que en el explorador de soluciones aparece
EntidadesDominio en negrita, lo que indica que es el proyecto de inicio. Con el botón derecho sobre
4. Creación de varios proyectos relacionados en una aplicación Web Visual 4
el ensamblado (proyecto) HerenciaAnimales, seleccionar en el menú contextual Establecer como
proyecto de inicio, y ejecutar nuevamente con F5. El formulario se visualizará en el navegador.
Los proyectos tipo biblioteca de clases no sirven para iniciar la ejecución, simplemente encapsulan
clases que serán utilizadas desde otros proyectos.
5. Observar que en el proyecto EntidadesDominio quedó automáticamente creada una clase Class1.cs.
Desde el explorador de soluciones cambiarle el nombre al archivo por Animal.cs, y verificar que haya
quedado cambiado el nombre lógico de la clase. Puede pedir confirmación, aceptarla (Para cambiar
el nombre es necesario haber detenido la ejecución – símbolo de stop en la barra de herramientas de
debug ).
6. Observar el código de la clase, en particular el Namespace que se creó:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EntidadesDominio
{
public class Animal
{
}
}
7. Observar, también, el código de la clase _Default (F7 para ver el code behind del formulario), y que el
Namespace donde está incluida se corresponde con el nombre del proyecto. Observar también que
algunas de las directivas using son diferentes:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace HerenciaAnimales
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
5. Creación de varios proyectos relacionados en una aplicación Web Visual 5
PARTE 2 – OBJETIVO:
Relacionar los proyectos mediante referencias y facilitar la visibilildad de las clases mediante los USING
correspondientes.
1. En el load del formulario intentar declarar una variable de tipo Animal. Escribir el siguiente código y
generar la solución . Se produce un error de compilación, que indica que no se puede acceder a la
clase Animal.
2. Cuando en una solución hay dos proyectos, para acceder a las clases del otro proyecto es necesario
referenciarlo.
A continuación crearemos las referencias necesarias.
Como desde la interfaz de usuario necesitamos acceder a la clase Animal, haremos que el
ensamblado HerenciaAnimales “conozca” al ensamblado EntidadesDominio.
Desde el explorador de soluciones, con el botón derecho sobre el nombre del proyecto
HerenciaAnimales > Agregar referencia y cuando salga el cuadro de diálogo, en la pestaña Proyectos
seleccionaremos EntidadesDominio. Aceptar.
Si observamos en el explorador de soluciones, veremos que en el ítem Referencias se agregó una
referencia a EntidadesDominio.
De esta manera, podremos acceder a las clases de ese proyecto.
3. Sin embargo, en el código del load, seguimos teniendo el mismo error. Para solucionarlo, deberemos
indicar que la clase Animal se encuentra en el ensamblado EntidadesDominio:
protected void Page_Load(object sender, EventArgs e)
{
EntidadesDominio.Animal unAnimal;
}
Ahora el proyecto compila (puede dar una advertencia de que no se está usando la variable
unAnimal, eso es porque no le hemos asignado nada; ignorarla).
4. Puede resultar pesado tener que calificar las clases del dominio con su namespace cada vez que la
queramos usar. Para eso se usa la directiva using.
6. Creación de varios proyectos relacionados en una aplicación Web Visual 6
Agregar antes de la declaración de clase (donde están todos los using), el código using
EntidadesDominio;
El código completo deberá quedar así:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using EntidadesDominio;
namespace HerenciaAnimales
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
EntidadesDominio.Animal unAnimal;
}
}
}
Ahora sí desde la capa de Presentación tenemos acceso a las entidades del Dominio.
Eso se puede representar así, en un diagrama de paquetes, en donde cada paquete es uno de los
namespace y están relacionados mediante una dependencia desde la presentación hacia el dominio:
<<Presentación>> <<Reglas de negocio>>
HerenciaAnimales EntidadesDominio
5. Desde el explorador de soluciones, botón derecho sobre el nodo de la solución > Abrir en el
Explorador de Windows (eso nos llevará hacia la carpeta donde está ubicada la solución). En la
carpeta del proyecto HerenciaAnimales, abrir la carpeta bin. Observar que se han generado dos
archivos con extensión dll: uno para el ensamblado de la presentación HerenciaAnimales.dll y otro
para el ensamblado del dominio EntidadesDominio.dll. Eso significa que nuestras páginas y clases
están incluidas en la primera dll, y las clases del dominio están contenidas en la segunda. Tenemos
ahora dos archivos físicos que forman nuestra solución.
6. Dependecias circulares.
Intentar ahora establecer una referencia desde el ensamblado EntidadesDominio hacia el
ensamblado HerenciaAnimales desde el explorador de soluciones (botón derecho sobre
EntidadesDominio > Agregar Referencia > Seleccionar el proyecto HerenciaAnimales.
7. Creación de varios proyectos relacionados en una aplicación Web Visual 7
Observar que se produce un error indicándonos que no se puede agregar una referencia al proyecto
HerenciaAnimales pues se crearía una dependencia circular:
Esto es así, porque para poder ser generado, el proyecto HerenciaAnimales requiere que
previamente esté compilada la dll del proyecto referenciado, EntidadesDominio. Pero a su vez, esta
necesita que haya compilado HerenciaAnimales. Ambas dependerían una de la otra, produciéndose
el efecto huevo-gallina.
RESUMEN:
- Nuestro objetivo es establecer distintas capas para organizar la aplicación.
- Esto creará diferentes archivos que contengan el código generado, uno por cada ensamblado
(proyecto) que forme parte de nuestra solución.
- Para esto creamos distintos proyectos, en particular un proyecto para la presentación y otro para
las entidades del dominio.
- Desde la presentación usaremos las entidades del dominio (nuestras clases), por lo que es
necesario agregarle al paquete de la presentación una referencia hacia el paquete de las
entidades del dominio (Agregar referencia). De ese modo, la DLL que se genere, conocerá las
clases incluidas en la DLL generada para el dominio.
- Para facilitar la escritura, es conveniente agregar una directiva using en el paquete de
presentación (el que “conoce”) hacia el paquete del dominio (el “conocido”).
- No es posible establecer dependencias circulares. Si el ensamblado A referencia al B, el B no
puede referenciar al A.