sábado, 11 de junio de 2016

Desarrollador Front-End, Back-End o Full Stack

Un desarrollador web no solo implica en una sola cosa, sino que abarca múltiples responsabilidades y más de un conjunto de habilidades que se determina a ciertos grupos de especialistas que la poseen. 

Obviamente que la responsabilidad sera otorgada a la persona adecuada según sus habilidades o simplemente su especialidad, hoy en día se habla muchísimo en el mundo del desarrollo web sobre los términos de front-end y back-end o simplemente de los full stack. En este articulo lo que pretendo es explicar las responsabilidad y ciertos conceptos a tomar en cuenta sobre cada uno de ellos.

El desarrollador Front-end:
Es el encargado de trabajar del lado del Cliente, es decir para la visualización en el navegador web. 
Y su principal ocupación es considerar todos los componentes externos del sitio web o de la aplicación web. Considerando como consecuencia y responsabilidad que la persona debe dominar obligatoriamente tecnologías tales como:

HTML, CSS, JavaScript y ciertos framework que hacen que la parte del lado del cliente se vea optimo y amigable para su uso, con un performance de diseño único y de gran calidad.

El desarrollador Back-end:
El back-end es el encargado de trabajar del lado Servidor, es decir de detrás del escenario del cliente. Es el encargado de construir y crear reglas de la aplicación, todo esto hace que su trabajo se vea reflejado del lado del cliente, con el previo desarrollo del front-end.  

Para ser un back-end del lado Servidor, basta con conocer y ser especialista en un solo lenguaje y tecnología o frameworks para poder realizar todo este trabajo, sin embargo no es suficiente con solo dominar el lenguaje y tecnología o frameworks, el desarrollador back-end debe estar capacitado y familiarizado con las bases de datos (Sql, ORACLE,MySql, etc) y no necesariamente ser un especialista en base de datos.

El desarrollador Full Stack:
Es el desarrollador multiusos, responsable del desarrollo del proyecto, desde el montaje de los servidores, hasta el diseño con CSS. Lo que se comenta actualmente es prácticamente imposible ser un buen desarrollador full stack. Tal y como evoluciona hoy en día la tecnología, es casi inviable estar de cada lado (Cliente/Servidor/Arquitectura) y dominar todos ellos. 

Bueno otra cosa que se menciona en general, los programadores que se hacen llamar full stack están más centrados en una de las dos partes, es decir, son especialista y dominan una de las partes y de la otra tienen nociones más que necesarias para dar soluciones, y muchos expertos dicen que estos perfiles suelen trabajar en pequeñas empresas donde ellos solos son los encargados de todo el desarrollo web (son opiniones y comentarios que se encuentra por la red, pero puede ser todo lo contrario).

En resumen:

Como se detalla en todo desarrollo web se presentan múltiples tareas y faces las cuales van evolucionan en nuestro día a día por la aparición de diferentes tecnologías. Lo mejor que se podría hacer es comenzar por especializarnos en uno de ellos, Front-end o Back-end sin dejar de lado el alma de tener en algo de Full Stack, desde luego que lo necesitaremos. 

viernes, 10 de junio de 2016

Construye una aplicación web desde cero con ASP.Net MVC

En el siguiente articulo se especifica todos los pasos necesarios para iniciarse e ir conociendo acerca de ASP.Net MVC, antes de iniciar con las fases de la construcción de la aplicación, te recomiendo leer el articulo Iniciando ASP.Net MVC encontrarás la información necesaria y resumida, además debe considerar otros puntos muy importantes antes de iniciarse, como por ejemplo las plantillas, motor de vista, pruebas unitarias y los directorio App_start ASP.Net MVC 

Requisitos para la implementación:
- Microsoft SQL Server Management Studio 2012.
- Microsoft Visual Studio Ultimate 2015 (Puede usar otras ediciones incluyendo la express).
- Framework 4  o 4.5 (Puede ser cualquiera de las 2, solo que la recomendación es iniciar y terminas con la que iniciaste).
- Dapper.Net (ORM para la  manipulación de datos desde la app, puedes agregarlo a tu proyecto desde nuget).
- Framework Bootstrap (para mejorar el diseño de nuestra aplicación)
- Y algo de Transact-SQL (para manipulación de datos desde base de datos).

Aquí dejo todos los pasos a seguir:
Crear Proyecto ASP.NET MVC - Fase I
Agregar modelo ASP.NET MVC - Fase II
Agregar controlador ASP.NET MVC - Fase III
Agregar vistas ASP.NET MVC - Fase IV
Bootstrap y ASP.NET MVC - Fase V
Pantalla de lo que se logrará al finalizar


Pueden descargar la fuente desde:
 Project - GitHub
Sugerencias y opiniones son bienvenidos o escríbanos a hadson1@gmail.com

Conozca acerca de WCF y Construya una Aplicación

En siguiente articulo quiero compartirles los conceptos necesarios para implementar servicios WCF (Windows Communication Foundation). Además, conoceremos acerca de como crear y cuales con los proyectos de tipo WCF, publicación en el IIS (Internet Information Server) y como consumir dicho servicio ya publicado.

Requisitos para la implementación:
- Microsoft SQL Server Management Studio 2008.
- Microsoft Visual Studio Ultimate 2010 o 2012.
- Framework 4 y MCV 4.
- Enterprise Library 5.
- AngularJS v1.2.24.
- Y algo de sentencia SQL (para manipulación de datos desde base de datos).

Aquí dejo todos los pasos a seguir:
Introducción a WCF - Fase I
Conexión a datos WCF - Fase II
Publicar Servicios WCF - Fase III
Consumir servicio WCF - Fase IV

Pantalla de lo que se logrará al finalizar



Sugerencias y opiniones son bienvenidos o escríbanos a hadson1@gmail.com

sábado, 4 de junio de 2016

Construyendo Objetos de Base de Datos - Módulo de Seguridad

Ahora implementaremos los procedimientos almacenados a nivel de base de datos que serán invocados desde nuestra aplicación webToda nuestra lógica de negocio será controlado desde la base de datos, nuestra aplicación web se encargará de alimentar de la lógica implementado en la base de datos.

PROCEDIMIENTOS ALMACENADOS PARA EL ACCESO Y VALIDACIÓN A LA APLICACIÓN WEB:

SP_GET_SEG_USUARIO_DASH:
Encarga de capturar todos los campos de la tabla SEG_USUARIO_DASH. Los campos USUARIO y PASSWORD, es para capturar los datos del usuario y pasar al controlador en primera instancia, a través de la acción se valida dichos datos para lograr el acceso a la aplicación (esto lo veremos al implementar la aplicación).

Script:
-- ====================================================
-- Author:  HADSON PAREDES CORDOVA
-- Create date: 2016/060/04
-- Description: Captura el ID_USUARIO, USUARIO,
--     PASSWORD, STS_REGISTRO, STS_RECORDAR
-- ====================================================
CREATE PROCEDURE SP_GET_SEG_USUARIO_DASH
AS
BEGIN
    SELECT ID_USUARIO, USUARIO,
           PASSWORD, STS_REGISTRO, STS_RECORDAR
    FROM   SEG_USUARIO_DASH
END

SP_GET_SEG_USUARIO_ROL_DASH:
Encarga de capturar todo los campos de la tabla USUARIO_ROL_DASHLos campos ID_USUARIO_ROL y ID_USUARIO, es útil para capturar y pasar los datos del rol al que pertenece dicho usuario ingresados en la primera instancia.

Script:
-- ====================================================
-- Author:  HADSON PAREDES CORDOVA
-- Create date: 2016/060/04
-- Description: Captura el ID_USUARIO_ROL, ID_USUARIO,
--              ID_MENU, STS_REGISTRO
-- ====================================================
CREATE PROCEDURE SP_GET_SEG_USUARIO_ROL_DASH
AS
BEGIN
    SELECT ID_USUARIO_ROL, ID_USUARIO,
      ID_MENU, STS_REGISTRO
    FROM SEG_USUARIO_ROL_DASH
END
PROCEDIMIENTO ALMACENADO PARA CONSTRUIR EL MENU DE ACUERDO AL ACCESO Y VALIDACIÓN:

SP_GET_SEG_MENU_DASH:
Encargado de capturar el ID_MENU, DESCRIPCION (descripción completa), CONTROLADOR (controlador a la que pertenece desde nuestra aplicación web), ACCION (acción que se realiza desde nuestra aplicación web), IMAGEN (asociado al menu a la que pertenece) y STS_REGISTRO (solo se puede mostrara el registro que este activo), todos estos campos es necesario para construir el menu completo de la aplicación según el usuario ingresado y al rol a la que pertenece dicho usuario.

Script:
-- =========================================================================
-- Author:  HADSON PAREDES CORDOVA>
-- Create date: 2016/060/04>
-- Description: Relaciona el menu dashboar con el rol usuario considerando
--     el parámetro @PC_USUARIO y el estado del  usario rol
-- =========================================================================
CREATE PROCEDURE SP_GET_SEG_MENU_DASH
 @PC_USUARIO VARCHAR(20)
AS
BEGIN
    SELECT M.ID_MENU,
      M.DESCRIPCION,
      M.CONTROLADOR,
      M.ACCION,
      M.IMAGEN,
      M.STS_REGISTRO
    FROM SEG_MENU_DASH M
      JOIN SEG_USUARIO_ROL_DASH R
      ON M.ID_MENU = R.ID_MENU
      JOIN SEG_USUARIO_DASH U
      ON R.ID_USUARIO = U.ID_USUARIO
    WHERE U.USUARIO = @PC_USUARIO
    AND     R.STS_REGISTRO = 1
END

Por ahora sólo se crearan estos 3 procedimientos almacenados. El la siguiente fase se creara la solución y los proyectos necesarios para el desarrollo de aplicación web.

Construyendo Modelo de Base de Datos - Módulo de Seguridad

Bueno, así que e decido implementar un modelo de base de datos que soporte y administre de manera dinámica y desde la base de datos el menu y sub menús de una determinada la aplicación y los acceso según el rol de cada usuario. 

En determinado momento he compartido un modelo de base de datos que tuve la oportunidad de implementarlo, si desean pueden echarle un vistazo ya que esto nos dará un panorama de lo que esperamos lograr. 

Luego de tener el modelo construido, implementaremos los objetos de base de datos (procedimientos almacenados, funciones y vista) y desarrollaremos una aplicación web haciendo uso del patrón de MVC, así que sin más detalles iniciamos construyendo nuestra base de datos y las tablas necesarias.

SCRIPTS  - BASE DE DATOS:
----------------------------------
-- CREACIÓN DE LA BASE DE DATOS
----------------------------------
USE MASTER
GO
IF EXISTS(SELECT NAME FROM SYSDATABASES WHERE NAME = 'BD_SEGURIDAD')
 DROP DATABASE BD_SEGURIDAD
GO
CREATE DATABASE BD_SEGURIDAD
GO

DESCRIPCIÓN DE TABLAS:

SEG_ROL_DASH:
Encarga de registrar la descripción del rol que se asignará a cada usuario.

SEG_MENU_DASH:
Encargado de registrar la descripción del menu a mostrar en el dashboard, así mismo registra el controlador, la acción (se considera que MVC siempre esta conformado por controlador/accion) y el detalle de la imagen a mostrar en el menu.

SEG_USUARIO_DASH:
Encargado de registrar los datos de acceso (usuario y password). Esta tabla tiene una particularidad única, ya que además registra el id del empleado al cual se asigna una cuenta usuario de acceso a la aplicación, de esta particularidad detallaremos más adelante.

SEG_USUARIO_ROL_DASH:
Es el encargo de unir las tres tablas arriba mencionadas (SEG_ROL_DASH, SEG_MENU_DASH y SEG_MENU_DASH) es decir es la tabla que contempla el acceso y control de menu de nuestra aplicación.

SCRIPTS - TABLAS:
----------------------------------
-- CREACIÓN DE TABLAS IDENTIFICAS
----------------------------------
USE [BD_SEGURIDAD]
GO
CREATE TABLE [SEG_ROL_DASH](
 [ID_ROL] [numeric](8, 0) NOT NULL,
 [DES_ROL] [varchar](50) NOT NULL,
 [STS_REGISTRO] [bit] NOT NULL,
 [USU_CREADOR] [varchar](20) NOT NULL,
 [FEC_CREACION] [datetime] NOT NULL,
 [USU_ACTUALIZA] [varchar](20) NULL,
 [FEC_ACTUALIZA] [datetime] NULL,
 CONSTRAINT [PK_SEG_ROL_DASH] PRIMARY KEY CLUSTERED
(
 [ID_ROL] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [SEG_MENU_DASH](
 [ID_MENU] [numeric](8, 0) NOT NULL,
 [DESCRIPCION] [varchar](50) NULL,
 [CONTROLADOR] [varchar](50) NOT NULL,
 [ACCION] [varchar](50) NOT NULL,
 [IMAGEN] [varchar](50) NULL,
 [STS_REGISTRO] [bit] NOT NULL,
 [USU_CREADOR] [varchar](20) NOT NULL,
 [FEC_CREACION] [datetime] NOT NULL,
 [USU_ACTUALIZA] [varchar](20) NULL,
 [FEC_ACTUALIZA] [datetime] NULL,
 CONSTRAINT [PK_SEG_MENU_DASH] PRIMARY KEY CLUSTERED
(
 [ID_MENU] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [SEG_USUARIO_DASH](
 [ID_USUARIO] [numeric](8, 0) NOT NULL,
 [COD_EMPLEADO] [numeric](10, 0) NOT NULL,
 [USUARIO] [varchar](20) NOT NULL,
 [PASSWORD] [varchar](20) NOT NULL,
 [STS_REGISTRO] [bit] NOT NULL,
 [STS_RECORDAR] [bit] NOT NULL,
 [USU_CREADOR] [varchar](20) NOT NULL,
 [FEC_CREACION] [datetime] NOT NULL,
 [USU_ACTUALIZA] [varchar](20) NULL,
 [FEC_ACTUALIZA] [datetime] NULL,
 CONSTRAINT [PK_SEG_USUARIO_DASH] PRIMARY KEY CLUSTERED
(
 [ID_USUARIO] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [SEG_USUARIO_ROL_DASH](
 [ID_USUARIO_ROL] [numeric](8, 0) NOT NULL,
 [ID_ROL] [numeric](8, 0) NOT NULL,
 [ID_USUARIO] [numeric](8, 0) NOT NULL,
 [ID_MENU] [numeric](8, 0) NOT NULL,
 [STS_REGISTRO] [bit] NOT NULL,
 [USU_CREADOR] [varchar](20) NOT NULL,
 [FEC_CREACION] [datetime] NOT NULL,
 [USU_ACTUALIZA] [varchar](20) NULL,
 [FEC_ACTUALIZA] [datetime] NULL,
 CONSTRAINT [PK_SEG_USUARIO_ROL_DASH] PRIMARY KEY CLUSTERED
(
 [ID_USUARIO_ROL] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
MODELO:

El la siguiente fase continuaremos creando los procedimientos almacenados a nivel de base datos, luego invocaremos todos los procedimientos almacenados creados desde la fuente de dominio de nuestra aplicación a construir.

La fase II ya se encuentran disponible.