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.
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:
Gracias
Publicar un comentario