Programación en Capas

 

Ejemplo en C# Ejemplo en PHP Visual Studio Ej. en ASP y C# Volver

 
 

Como crear un proyecto en vbnet en 3 capas:

 

Inicio de Sesión

 

Implementar un proyecto en 3 capas + Sql Server + Store Procedure Requerimientos previos:

  • Visual Studio (la versión usada es 2012, pero se pueden usar las versiones 2005, 2008, 2010, 2014)

  • Sql Server (la versión se deja a gusto del lector)

  • SqlHelper.vb (lo podrán descargar del siguiente enlace: 

https://drive.google.com/file/d/0B06JT-pKtewcaXc3cFFQRV9vSEk/view?usp=sharing)

  • Un poco de entusiasmo y ganas de aprender.

 

Pero, ¿Porque desarrollar en arquitectura de capas?

  • Facilita su desarrollo al mantener un orden y separar las responsabilidades.

  • Ayuda a reutilizar el código.

  • Es escalable, ósea facilita a la modificación del proyecto en etapas avanzadas y en modificaciones futuras luego de concluir el proyecto.

  • Fácil entendimiento del código fuente.

  • Facilidad de migración de base de datos, entre otros.

Creando la solución

 

Implementar el proyecto

  1. Creamos el proyecto: "Archivo/Nuevo Proyecto..."

     

    Con el nombre de "SisPamf" (o elegimos el nombre que mejor les parezca)

     

     

    Debe quedar de la siguiente forma:

     

     

  2. Agregamos un nuevo proyecto (la Capa Lógica de Negocio): "Archivo/Agregar/ Nuevo proyecto..."

     


     

    El sistema nos pedirá guardar el proyecto; deberás guardarlo con el nombre de SisPamf (o el nombre de tu proyecto elegido)

     

     

    Entonces tendremos lo siguiente

     

     

  3. Agregamos la Capa de Acceso a Datos: "Archivo/Agregar/Nuevo proyecto..."; con el nombre de "AccesoDatos" y aceptar.

     

     

  4. Agregar "Entidades" para nuestro proyecto: "Archivo/Agregar/Nuevo proyecto..."; con el nombre de "Entidades" y aceptar

     

     

    Nuestro Explorador de soluciones debería quedar de la siguiente forma, ¿Notan la división de las capas?.

     

     

  5. Ahora tenemos que agregar las "referencias" a los proyectos, los cuales quedarán de la siguiente forma:

    • Capa Presentación tendrá como referencia a: Capa Entidad y Capa Lógica: Clic derecho al nombre del proyecto "SistPamf" (Capa de Presentación) en el Explorador de soluciones, y seleccionar "Agregar Referencia"; una vez dentro, marcamos "Entidades" y "Lógica" y luego aceptamos.

    • Capa Lógica tendrá como referencia a: Capa Entidad y Capa Acceso a Datos: Clic derecho al nombre del proyecto "SistPamf" (Capa de Presentación) en el Explorador de soluciones, y seleccionar "Agregar Referencia"; una vez dentro, marcamos "AccesoDatos" y "Entidades" y luego aceptamos.

     

  6.  Ahora Crearemos una base de datos SQL con el nombre de: "Prueba_BD" Y ejecutaremos el siguiente script para la creación de la tabla y el procedimiento almacenado (Store Procedure):

     

    USE [Prueba_BD]
     2 GO
     3 /****** Object:  Table [dbo].[Usuarios]    Script Date: 11/03/2018 16:13:39 ******/
     4 SET ANSI_NULLS ON
     5 GO
     6 SET QUOTED_IDENTIFIER ON
     7 GO
     8 SET ANSI_PADDING ON
     9 GO
    10 CREATE TABLE [dbo].[Usuarios](
    11  [Id_Usuario] [int] IDENTITY(1,1) NOT NULL,
    12  [NombreUsuario] [varchar](15) NOT NULL,
    13  [Contraseña] [varchar](50) NOT NULL,
    14  [Estado] [nchar](1) NOT NULL
    15 ) ON [PRIMARY]
    16 GO
    17 SET ANSI_PADDING OFF
    18 GO
    19 SET IDENTITY_INSERT [dbo].[Usuarios] ON
    20 INSERT [dbo].[Usuarios] ([Id_Usuario], [NombreUsuario], [Contraseña], [Estado]) VALUES (1, N'Oswaldo', N'123', N'1')
    21 SET IDENTITY_INSERT [dbo].[Usuarios] OFF
    22 /****** Object:  StoredProcedure [dbo].[S_ValidarUsuario]    Script Date: 11/03/2015 15:15:40 ******/
    23 SET ANSI_NULLS ON
    24 GO
    25 SET QUOTED_IDENTIFIER ON
    26 GO
    27 -- =============================================
    28 -- Author:  xxx
    29 -- Create date: <31/10/2017>
    30 -- Description: <Ejemplo >
    31 --

    32 -- =============================================
    33 CREATE PROCEDURE [dbo].[S_ValidarUsuario]
    34  -- Add the parameters for the stored procedure here
    35  @Usuario as varchar(20)
    36 AS
    37 BEGIN
    38  -- SET NOCOUNT ON added to prevent extra result sets from
    39  -- interfering with SELECT statements.
    40  SET NOCOUNT ON;
    41
    42     -- Insert statements for procedure here
    43  SELECT Id_Usuario, NombreUsuario, Contraseña, Estado from Usuarios where NombreUsuario=@Usuario and Estado='1'
    44 END
    45 GO

     

    Para este ejemplo utilizaremos un la clase SqlHelper.vb (Encontraremos el link líneas arriba), el cual brinda un conjunto de métodos necesarios para la conexión con la base de datos, de esta forma solo necesitaremos sólo esta clase para nuestra capa Acceso a Datos. 

     

    Para hacer esto realizamos lo siguiente: Primero copiamos el archivo descargado en la carpeta "AccesoDatos" que se creo en la raíz de nuestro proyecto.

     

    Al copiar nos debería quedar así:

     

    Ahora, agregamos la clase "SqlHelper.vb": Clic derecho en Acceso a datos en explorador de soluciones, "Agregar/Elemento existente..."

     

     

    Seleccionamos la clase SqlHelper.vb y aceptamos

     

     

     Una vez que agregamos la clase, tendremos la capa de acceso a datos listo para la conexión con la base de datos, ahora nos pasamos a la "Entidades"

     
  7.  Procedemos a crear la clase que utilizaremos para nuestro inicio de sesión. Clic derecho en "Entidades" en el explorador de soluciones, luego en "Agregar/Clase..."

     


    Con el nombre de "UsuarioE":


    Con el siguiente código:

     

    Public Interface I_UsuarioE
     2     Property iId_Usuario() As Integer
     3     Property iNombreUsuario() As String
     4     Property iContraseña() As String
     5     Property iEstado() As String
     6 End Interface
     7 Public Class UsuarioE
     8     Implements I_UsuarioE
     9
    10     Private xId_Usuario As String = ""
    11     Private xNombreUsuario As String = ""
    12     Private xContraseña As String = ""
    13     Private xEstado As String = ""
    14
    15     Public Property iContraseña As String Implements I_UsuarioE.iContraseña
    16         Get
    17             Return xContraseña
    18         End Get
    19         Set(ByVal Value As String)
    20             xContraseña = Value
    21         End Set
    22     End Property
    23
    24     Public Property iEstado As String Implements I_UsuarioE.iEstado
    25         Get
    26             Return xEstado
    27         End Get
    28         Set(ByVal Value As String)
    29             xEstado = Value
    30         End Set
    31     End Property
    32     Public Property iId_Usuario As Integer Implements I_UsuarioE.iId_Usuario
    33         Get
    34             Return xId_Usuario
    35         End Get
    36         Set(ByVal Value As Integer)
    37             xId_Usuario = Value
    38         End Set
    39     End Property
    40     Public Property iNombreUsuario As String Implements I_UsuarioE.iNombreUsuario
    41         Get
    42             Return xNombreUsuario
    43         End Get
    44         Set(ByVal Value As String)
    45             xNombreUsuario = Value
    46         End Set
    47     End Property
    48 End Class

     

    El código fuente lo podemos encontrar en el archivo final del ejemplo.

     

  8. Proceder a crear la clase "UsuarioL" en la "Capa Lógica de Negocio": hacemos clic derecho en "Lógica" en el Explorador de Soluciones, seleccionamos "Agregar/ Clase..", y nos aparecerá el siguiente.

     

     

    Creamos la clase "UsuarioL"

     

     

    Y escribimos el siguiente código en el.

     

     1 Imports Entidades 'Hacemos referencia a las Entidades de nuestro proyecto"
     2 Imports AccesoDatos 'Hacemos referencia a la Capa de Acceso a Datos"
     3 Public Interface I_USUARIOL
     4     'Creamos la función Validar Contraseña y enlazamos con la entidad
     5     Function ValidarContraseña(ByVal ConecX As String, ByVal eUsuarioE As Entidades.UsuarioE) As Boolean
     6 End Interface
     7 Public Class UsuarioL
     8     Implements I_USUARIOL
     9
    10     Public Function ValidarContraseña(ConecX As String, eUsuarioE As UsuarioE) As Boolean Implements I_USUARIOL.ValidarContraseña
    11         Dim Ds_Usuario As DataSet
    12         Dim xExiste As Integer
    13         Dim strSP As String = "S_ValidarUsuario" 'Aquí va el nombre del Procedimiento almacenado de nuestro SQL Server
    14         Try
    15             'A la Base de datos solamente le vamos a enviar el Nombre de Usuarios
    16             Ds_Usuario = SqlHelper.ExecuteDataset(ConecX, strSP, eUsuarioE.iNombreUsuario) 'Agregamos las variables de "Entidades" que vamos a usar
    17
    18             xExiste = Ds_Usuario.Tables(0).Rows.Count 'Verificamos existen datos de nuestras credenciales
    19             If xExiste <> 0 Then ' Al ubicar nuestro usuario, el registro que obtenemos debe ser mayor a 0
    20                 If Ds_Usuario.Tables(0).Rows(0).Item(2).ToString = eUsuarioE.iContraseña Then 'Aquí vericaremos si la contraseña es igual al que le enviamos, el Item(2) indíca que obtendra el dato de la columna que esta posición 3
    21                     Return True 'En caso de ser la contraseña correcta, retornaremos el valor de true a nuestra capa presentación
    22                 End If
    23             Else
    24                 Return False 'En caso de ser la contraseña incorrecta, retornaremos el valor de false a nuestra capa presentación
    25             End If
    26             'El motívo por el cual solo se envía el usuario a la base de datos es para evitar los ataques "SQL Inyection"
    27         Catch ex As Exception
    28             Throw ex
    29         End Try
    30     End Function
    31 End Class

     

  9. Ahora creamos el formulario para nuestro inicio de sesión. Clic derecho en el "Explorador de Soluciones" y luego seleccionamos "Agregar/Windows Forms..."

     

    Creamos el formulario con el nombre de "LoginForm1"

     

     

    Con este formulario que viene en forma predeterminada en el visual studio, tendremos lo necesario para realizar nuestro formulario de inicio de sesión.

     

     

    Hacemos doble clic en el botón  aceptar formulario LoginForm1 y tendremos lo siguiente

     

     

    Remplazamos por el siguiente código 

     

     1 Imports Entidades 'Improtamos la clase Entidades
     2 Public Class LoginForm1
     3     Public ConecX As String 'Creación de la variable para el string de conexión
     4     Dim ObjUsuarioL As New Logica.UsuarioL 'agregamos nuestro objeto UsuarioL para obtener los metodos que usaremos
     5     Dim ObjUsuarioE As New Entidades.UsuarioE 'Creación del Objeto en Entidades
     6     Dim xCont As Integer 'Será nuestro contador de Intentos de sesión
     7
     8     Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
     9         ValidarUsuario()
    10     End Sub
    11
    12     Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
    13         Me.Close()
    14     End Sub
    15     Private Sub ValidarUsuario()
    16         'Sera nuestro string de conexión con la base de datos
    17         'Data source: es el nombre de nuestro servidor SQL
    18         'Initial catalog: es el nombre de nuestra base de datos
    19         'User id: es el usuario de inicio de sesión en el Sql Server
    20         'Password: es la contraseña utilizada para el inicio de sesión del sql server
    21
    22         'Este línea de conexión puede ser creado en un Módulo a parte como variable global,
    23         'pero como solo tendremos un formulario y esto es un ejemplo lo dejaremos así
    24         ConecX = "data source = DALOWOS\LINK; initial catalog = Prueba_BD; user id = sa; password =dalowos"
    25
    26         'Creación de las variables locales
    27         Dim xUsuario As String
    28         Dim xPassword As String
    29         Dim xExiste As Boolean ' esta variable como indicador de la existencia del usuario en la base de datos
    30
    31
    32         xExiste = False
    33         xUsuario = ""
    34         xPassword = ""
    35
    36         ObjUsuarioE.iNombreUsuario = UsernameTextBox.Text ' Asignamos el valor del texto Usuario a nuestra Entidad
    37         ObjUsuarioE.iContraseña = PasswordTextBox.Text ' Asignamos el valor del texto Contraseña a nuestra Entidad
    38         xExiste = ObjUsuarioL.ValidarContraseña(ConecX, ObjUsuarioE) 'Enviamos el objeto ObjUsuario a nuestra capa de lógica
    39
    40         If xExiste = True Then
    41             MsgBox("la contraseña es correcta, bienvenido la Sistema", MsgBoxStyle.OkOnly)
    42         Else
    43             MsgBox("Usuario y/o Contraseña incorrecta", MsgBoxStyle.Critical, "Informe de Error")
    44             If xCont = 3 Then 'En caso llegar al tercer intento te saldrá el siguiente mensaje de error y te expulsará del sistema
    45                 MsgBox("Exedió el número de intentos", MsgBoxStyle.Critical, "Informe de Error")
    46                 Me.Close()
    47             End If
    48             xCont += 1 'Aquí sumaremos +1 cada vez que el usuario se equivoca al ingresar
    49         End If
    50     End Sub
    51
    52     Private Sub LoginForm1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    53         'Inicamos variables
    54         'Contador en 1
    55         xCont = 1
    56     End Sub
    57 End Class

     

    No olvidar eliminar el Form1 para que lo primero que aparezca sea el LoginForm1.

     

     
  10. Ahora realizamos las pruebas (La parte donde nos alegramos al ver que todo funciona)

    Hacemos clic en Iniciar.

     

     

    Nos tendría que salir el formulario que hemos creado "FormLogin1"

     

     

    Utilizamos las siguientes credenciales para ingresar:

     

    Nombre de Usuario: oswaldo

    Contraseña: 123

    y nos debería mostrar el mensaje de contraseña correcta.


    Con esto terminamos el formulario de inicio de sesión en tres (3) capas en visual studio .net con SQL Server.

     
    Bajar el proyecto completo con su código

 

Volver

 

 

*