Arquitectura de SoftwareUtilizando .net Remoting, Programación en Capas, Programación Orientada a Objetos y patrones de programación, (SqlServer 2000 Back End)Parte V: Interfaz de Usuario (UI)
Fecha: 10/Ago/2005 (8 de Agosto de 2005)
|
Esta capa se encarga de la presentación visual de los datos hacia los usuarios finales u operadores del sistema. También se encarga de dar las facilidades para manipular la información.
Esta aplicación puede ser desarrollada en aplicaciones de Windows (Windows-Base Application), aplicaciones Web(ASP.NET) ó aplicaciones mobiles (Mobile Application), indistintamente del "Front End" seleccionado, los componentes vistos de la parte I a la parte IV son los mismos!!!. Esa es una de las ventajas de utilizar programación en capas. Y si se modifica alguna regla de negocios o acceso a datos, la interfaz de usuario no tiene que modificarse!!!.
En esta Capa se utilizan las referencias hacia Entity.dll (parte II) y mobileBO.dll (parte IV).
Bueno, pasemos a lo interesante. Para utilizar los objetos remotos ofrecidos por el servidor de componentes(parte I) las cuales son las fachadas, se tienen que registrar con el siguiente segmento de código:
private void FrmMain_Load(object sender, System.EventArgs e)
{
ChannelServices.RegisterChannel(new TcpClientChannel());
string servidorComponentes = ConfigurationSettings.AppSettings["ServidorComponentes"].ToString();
RemotingConfiguration.RegisterActivatedClientType(typeof(mobileBO.Facade),
"tcp://"+servidorComponentes+":9946/TestCAO");
}
Analizemos el código, lo que estamos haciendo aquí es, primero, registrando un canal de tipo Tcp, por que en el servidor también lo registramos así, luego obtenemos del archivo App.config el valor de la variable "ServidorComponentes", la cual nos da la Ip o el HostName del servidor de componentes, donde se encuentran publicadas nuestras fachadas con toda la funcionalidad para el sistema de la interfaz de usuario. Después utilizamos el método RegisterActivatedClientType de la clase RemotingConfiguration, el cual nos permite registrar la clase como remota, es decir que cuando se instancie esa clase en cualquier parte del código del sistema, la va a ir a buscar a esa Uri que le asignamos.
A continuación veremos un fragmento de código donde se utiliza la llamada a un método de la fachada para consultar una entidad para trabajar con ella en memoria:
// primero se instancia la fachada remota, si el servidor no esta listo aqui recibiremos un error de comunicación
mobileBO.Facade fachada = new mobileBO.Facade();// buscar el estado para ver si es cambio o alta
estado = fachada.TraerEntidades(int.Parse(this.txtEstado.Text));
if (estado == null)
{
//no existe, por lo tanto se creara una instancia nueva para su posterior insercion, aqui automaticamente la entidad "estado", queda con el estatus de nueva, y al mandarse guardar se insertara en la base de datos
estado = new Entity.Entidad();
this.txtDescripcion.Text="";
this.cboPaises.SelectedIndex = -1;
}
else
{
// en esta parte, se obtienen los datos de la entidad "estado", para presentarlos, en las cajas de texto al usuario.
this.cboPaises.SelectedValue = estado.Pais.PaisId;
this.txtDescripcion.Text = estado.Descripcion;
}
Ahora veremos un fragmento de código donde se utiliza la llamada a un método de la fachada para almacenar una entidad en la base de datos:
//Instanciamos fachada remota
mobileBO.Facade fachada = new mobileBO.Facade();
listaEstados=new Entity.ListaEntidades();//Asigno valores a la Entity entidad
estado.Estado = int.Parse(this.txtEstado.Text);
estado.Descripcion = this.txtDescripcion.Text;
estado.Pais = listaPaises.FindByPrimaryKey(int.Parse(this.cboPaises.SelectedValue.ToString()));
listaEstados.Add(estado);
fachada.GuardarEntidad(ref listaEstados);// Inicializamos valores
MessageBox.Show("Se Guardo Correctamente!!!");
this.InicializarControles();
Por último veremos como utilizar una entidad de colección como DataSource de un control:
// creamos la intancia de la fachada remota
mobileBO.Facade fachada = new mobileBO.Facade();
Entity.ListaEntidades listaEstados=new Entity.ListaEntidades();
listaEstados = fachada.TraerEntidades();
//enlazamos los datos al DatGrid, pero pudo haber sido unComboBox, ListView o cualquier control que acepte un ICollection como DataSource
this.dtgConsultaEstados.DataSource = listaEstados;
Bueno este fue el ultimo capitulo de la arquitectura de red, muchas gracias por dedicarle tiempo en leerlo y votarlo, si necesitan ver mas ejemplos o mas codigo fuente, con mucho gusto.
Gracias y hasta la próxima.
Espacios de nombres usados en el código de este artículo:
using Entity.dll;
using mobileBO.dll;
using System.Runtime.Remoting.Channels ;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels.Tcp ;
Nota 25/Ago/06: Corregido el link al fichero.
Fichero con el código de ejemplo: rhernandez_ClienteUI.zip - Tamaño 25KB