Programación en capas No. 6 - codificando el front-end

on domingo, 9 de diciembre de 2012

Buen día, ahora les traigo la programación para el front en esta serie de entradas de programación en capas, como ya les había comentado, para el ejemplo práctico usaremos las pantallas prehistóricas de Windows forms, lo primero que tenemos que hacer, es diseñar nuestra pantalla, a la cual les pondré el código del designer y les pegare una foto de cómo debe lucir nuestra pantalla.


LoginPrueba - Microsoft Visual Studio (Administrador)_2012-12-09_11-18-19

básicamente solo necesitamos ingresar el nombre de usuario y la contraseña a la cual tenemos que presionar el botón para poder autenticarnos.

para poder recrear dicho código  lo que necesitamos es copiar tal cual el código del designer. se los pongo a  continuación.


 namespace LoginPrueba  
 {  
   partial class Form1  
   {  
     /// <summary>  
     /// Variable del diseñador requerida.  
     /// </summary>  
     private System.ComponentModel.IContainer components = null;  
     /// <summary>  
     /// Limpiar los recursos que se estén utilizando.  
     /// </summary>  
     /// <param name="disposing">true si los recursos administrados se deben eliminar; false en caso contrario, false.</param>  
     protected override void Dispose(bool disposing)  
     {  
       if (disposing && (components != null))  
       {  
         components.Dispose();  
       }  
       base.Dispose(disposing);  
     }  
     #region Código generado por el Diseñador de Windows Forms  
     /// <summary>  
     /// Método necesario para admitir el Diseñador. No se puede modificar  
     /// el contenido del método con el editor de código.  
     /// </summary>  
     private void InitializeComponent()  
     {  
       this.btnAcceder = new System.Windows.Forms.Button();  
       this.txtPassword = new System.Windows.Forms.TextBox();  
       this.txtUser = new System.Windows.Forms.TextBox();  
       this.label1 = new System.Windows.Forms.Label();  
       this.label2 = new System.Windows.Forms.Label();  
       this.panel1 = new System.Windows.Forms.Panel();  
       this.panel1.SuspendLayout();  
       this.SuspendLayout();  
       //   
       // btnAcceder  
       //   
       this.btnAcceder.Location = new System.Drawing.Point(49, 136);  
       this.btnAcceder.Name = "btnAcceder";  
       this.btnAcceder.Size = new System.Drawing.Size(75, 23);  
       this.btnAcceder.TabIndex = 0;  
       this.btnAcceder.Text = "Acceder";  
       this.btnAcceder.UseVisualStyleBackColor = true;  
       this.btnAcceder.Click += new System.EventHandler(this.btnAcceder_Click);  
       //   
       // txtPassword  
       //   
       this.txtPassword.Location = new System.Drawing.Point(13, 95);  
       this.txtPassword.Name = "txtPassword";  
       this.txtPassword.Size = new System.Drawing.Size(149, 20);  
       this.txtPassword.TabIndex = 1;  
       //   
       // txtUser  
       //   
       this.txtUser.Location = new System.Drawing.Point(13, 37);  
       this.txtUser.Name = "txtUser";  
       this.txtUser.Size = new System.Drawing.Size(149, 20);  
       this.txtUser.TabIndex = 2;  
       //   
       // label1  
       //   
       this.label1.AutoSize = true;  
       this.label1.Location = new System.Drawing.Point(10, 11);  
       this.label1.Name = "label1";  
       this.label1.Size = new System.Drawing.Size(96, 13);  
       this.label1.TabIndex = 3;  
       this.label1.Text = "Nombre de usuario";  
       //   
       // label2  
       //   
       this.label2.AutoSize = true;  
       this.label2.Location = new System.Drawing.Point(10, 69);  
       this.label2.Name = "label2";  
       this.label2.Size = new System.Drawing.Size(61, 13);  
       this.label2.TabIndex = 4;  
       this.label2.Text = "Contraseña";  
       //   
       // panel1  
       //   
       this.panel1.Controls.Add(this.label1);  
       this.panel1.Controls.Add(this.btnAcceder);  
       this.panel1.Controls.Add(this.txtPassword);  
       this.panel1.Controls.Add(this.label2);  
       this.panel1.Controls.Add(this.txtUser);  
       this.panel1.Location = new System.Drawing.Point(12, 12);  
       this.panel1.Name = "panel1";  
       this.panel1.Size = new System.Drawing.Size(187, 173);  
       this.panel1.TabIndex = 5;  
       //   
       // Form1  
       //   
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);  
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;  
       this.ClientSize = new System.Drawing.Size(215, 197);  
       this.Controls.Add(this.panel1);  
       this.Name = "Form1";  
       this.Text = "Form1";  
       this.panel1.ResumeLayout(false);  
       this.panel1.PerformLayout();  
       this.ResumeLayout(false);  
     }  
     #endregion  
     private System.Windows.Forms.Button btnAcceder;  
     private System.Windows.Forms.TextBox txtPassword;  
     private System.Windows.Forms.TextBox txtUser;  
     private System.Windows.Forms.Label label1;  
     private System.Windows.Forms.Label label2;  
     private System.Windows.Forms.Panel panel1;  
   }  
 }  


ahora tenemos que darle funcionalidad a nuestra pantalla, que en teoría, el código debiera ser más compacto, más limpio, y sin la funcionalidad de la lógica de negocios, que como el post lo indica, estamos programando en capas y esa lógica debe de estar encapsulada en el controller de nuestra aplicación.


 using System;  
 using System.Collections.Generic;  
 using System.ComponentModel;  
 using System.Data;  
 using System.Drawing;  
 using System.Linq;  
 using System.Text;  
 using System.Windows.Forms;  
 using BusinessLogicLayer;  
 namespace LoginPrueba  
 {  
   public partial class Form1 : Form  
   {  
     public Form1()  
     {  
       InitializeComponent();  
     }  
     private void btnAcceder_Click(object sender, EventArgs e)  
     {  
       //posible mejora aplicando un singleton al controller... proximamente  
       SecurityController controller = new SecurityController();  
       if (!string.IsNullOrEmpty(txtPassword.Text) && !string.IsNullOrEmpty(txtUser.Text))  
       {  
         if (controller.Autenticate(txtUser.Text, txtPassword.Text))  
           MessageBox.Show("welcome to the system");  
         else  
           MessageBox.Show("username or password is incorrect");  
       }  
     }  
   }  
 }  


Y ahora analicemos un poco el código, el botón que autentica  no es más que una condicional, que nos indica si el usuario esta autenticado o no, para esto tenemos que hacer una instancia de nuestro controller para poder acceder a la gama de métodos disponibles en el, en este caso obviamente solo hay un método, que es el de ejemplo.


Espero que les haya sido de utilidad esta serie de post que ejemplifican el trabajo en capas, obviamente esta forma de trabajar no es ley ya que se esta trabajando con una tecnología ORM de LinqToSql y ademas el diseño arquitectónico de este ejemplo puede ser mejorado y optimizado.

el objetivo de estos post fue brindar una idea clara y sobre todo dar una introducción al desarrollo en capas.

de antemano gracias por su atención.

su humilde servidor


Fernando Hoyos.

1 comentarios:

Anónimo dijo...

Gracias

Publicar un comentario