Luis Baigorria – Software Developer

Acquire Wisdom and Live with Passion

Archive for the ‘UIBASOFT’ Category

Extensiones Dev para Visual Studio

leave a comment »

Saludos.

En esta oportunidad quiero compartirles las extensiones de Visual Studio que estoy usando en estos momentos, principalmente en el proyecto ASM – Agente Salvavidas de Mascotas.

Espero sea de su interés

01-github-extension-for-visual-studio

02-productivity-power-tools-2015

03 Web Essentials.png

04 Github Extension.png

05 File Nesting.png

06 Web Extension Pack 2015.png

Saludos

Written by Luis Alberto

23/02/2017 at 11:19 PM

Proyecto Agente Salvavidas de Mascotas – ASM OpenSource

leave a comment »

Hola a todos.

Como lo había comentado hace un par de semanas atrás en la página de Facebook. Quiero y deseo crear una aplicación web para gestionar el proceso de publicación y adopción de mascotas. Será un proyecto de código abierto y le he puesto por nombre “ASM – Agente Salvavidas de Mascotas”. La idea principal es crear una comunidad de personas dispuestas a salvar y mejorar la calidad de vida de mascotas abandonadas en las calles o puestas en adopción, ofreciéndoles esta herramienta para facilitar y gestionar el proceso de encontrarles un hogar.

00001

¿Quieres ser parte del proyecto?

El proyecto estará escrito usando tecnología Microsoft .NET con C# 6.0 como lenguaje de programación, NET Framework 4.6.1, inicialmente con ASP.NET Web API como Framework de Servicios, etc.

He creado el repositorio en GitHub con la solución en blanco.

Características:

  • Gestionar Mascotas para Adopción
  • Gestionar Candidados de Adopción de Mascotas
  • Gestionar Estados de Publicación de Mascotas
  • Arquitectura del proyecto Domain Driven Design
  • Patrones de diseño Unidad de Trabajo, Repositorio, Inversión de Control e Inyección de Dependencias, Dtos, etc.
  • Autenticación Web API 2 OAuth Bearer Tokens
  • API REST bajo ASP.NET Web API 2
  • Entity Framework con Code First
  • Seguridad de Usuarios con ASP.NET Identity (Por definir)
  • Implementación de Pruebas Unitarias
  • Repositorio de Codigo GitHub

Como pueden ver, inicialmente el proyecto será creado como servicio usando ASP.NET Web API como Back-End. Espero que sea un proyecto de utilidad y sirva como base para futuros proyectos.

00002

En los próximos días estaré compartiendo y actualizando las primeras actividades a desarrollar en el proyecto en el Tablero de trabajo de GitHub

De igual manera, si encuentras errores en el proyecto, o tienes algunos comentarios / sugerencias puedes enviarlas al área de Issues de GitHub, o al correo: uialberto@outlook.com

Saludos y hasta pronto!

Written by Luis Alberto

05/01/2017 at 1:13 AM

Contenedor de Inversión de Control – Unity 3.0 para ASP.NET MVC

leave a comment »

Saludos.

Continuamos con los contenedores de inversión de control, en esta oportunidad nos vamos a centrar en Unity.mvc, el contenedor oficial de Microsoft creado por el equipo Patterns & Practices para proyectos ASP.NET MVC.

Instalación

Para instalar el componente usamos Nuget, ya sea desde la interfaz gráfica o la consola de instalación.

 PM> Install-Package Unity.mvc

Una vez finalizada la instalación del paquete podemos ver que se han creado un par de archivos en la carpeta App_Start: UnityConfig.cs y UnityMvcActivator.cs. En el primero de ellos encontramos la configuración de contenedor, el punto en el que registraremos nuestras clases e interfaces para posteriormente usarlas en la resolución de dependencias. En UnityMvcActivator.cs, se encuentra el código de inicialización específico de la integración para ASP.NET MVC, usando el componente WebActivatorEx, una útil herramienta que permite introducir módulos de forma dinámica, durante el arranque.

Registro de componentes

El registro de interfaces y clases se lo realiza sobre el contenedor Unity. Para ello, nos dirigimos al archivo UnityConfig.cs e implementarlo de la misma forma que siempre:

public static void RegisterTypes(IUnityContainer container)
{
 // container.LoadConfiguration();
 
 // TODO: Registrar los tipos aqui
 
 container.RegisterType<IUnitOfWork, UnitOfWork>(new TransientLifetimeManager(), 
 new InjectionConstructor(connectionString.ConnectionString));

 // container.RegisterType<IUsuariosRepository, UsuariosRepository>();
 // container.RegisterType<IMascotasRepository, MascotasRepository>();
 
 container.RegisterType<IUsuariosAppServices, UsuariosAppServices>(new ContainerControlledLifetimeManager());
 container.RegisterType<IMascotasAppServices, MascotasAppServices>("SingletonMascota", new ContainerControlledLifetimeManager());
 container.RegisterType<FuenteDigital>(new ContainerControlledLifetimeManager(), 
 new InjectionProperty("Id", objeto.Id), new InjectionProperty("Name", objeto.Name));

}

Así podemos ir registrando cuantos pares interfaz-clase necesitemos en la aplicación.

Instancias Per request

Una de las características importanes en Unity 3.0 y su integración con MVC es la gestión del ciclo de vida de las instancias per request. Los que antes se tenia que pensar en vincular las instancias a un contenedor padre usando HierarchicalLifetimeManagers o sobrescribir manualmente el método Dispose() para que éste fuera liberado una vez termine la petición, ahora podemos ir al grano registrando los componentes y/o clases de forma PerRequestLifetimeManager, con esto hacemos que las instancias sean únicas por cada request o petición, ahorrando recursos y/o memoria.

public static void RegisterTypes(IUnityContainer container)
{
 // container.LoadConfiguration();
  container.RegisterType<IUsuariosRepository, UsuariosRepository>(new 
   PerRequestLifetimeManager());
  container.RegisterType<IMascotasRepository, MascotasRepository>(new 
   PerRequestLifetimeManager());
}

Para que esto sea posible y las instancias sean liberadas correctamente al finalizar la petición, en el archivo UnityMvcActivator.cs que Nuget ha dejado en la carpeta App_Start:

public static void Start() 
{
 var container = UnityConfig.GetConfiguredContainer();
 //....
 //....

 // TODO: Uncomment if you want to use PerRequestLifetimeManager
 // Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility
 // .RegisterModule(typeof(UnityPerRequestHttpModule));
}

Simplemente descomentamos la llamada a RegisterModule() del final y las instancias serán liberadas al finalizar la petición de forma automática, lo que antes lo hacíamos con los Dispose(), ahora Unity nos ahorra el trabajo de hacerlo automáticamente.

Convenciones

Otras de las características importantes que tiene Unity 3.0 son las convenciones, el poder registrar los componentes basándonos en convenciones es mucha dosis, nos ahora bastante trabajo a la hora de hacer el mantenimiento. Para lograr ésto, debemos decirle a Unity que debe usar la convención de nombrado para interfaces y clases con nombres equivalentes, aquí un ejemplo:

public static void RegisterTypes(IUnityContainer container)
{
 container.RegisterTypes(
 AllClasses.FromAssemblies(typeof(MvcApplication).Assembly),
 WithMappings.FromMatchingInterface,
 WithName.Default, 
 WithLifetime.Custom<PerRequestLifetimeManager>
 );
}

Con ésto ya no tendremos que asociar mil interfaces del tipo IMyComponent a la clase MyComponent. Por supuesto, estas convenciones son configurable y puedes conocer mas en el sitio oficial de Unity.

Espero esta publicación te sirva como una introducción al contenedor Unity, sin duda puedes encontrar ejemplos avanzado en la pagina oficial, lo importante es que vayas conociendo algunas herramientas que facilitan el proceso y gestión del ciclo de vida de los componentes.

Saludos.

Written by Luis Alberto

26/09/2016 at 9:11 PM

Publicado en Artículos, ioc, Microsoft, UIBASOFT

Presentacion Tips Team Foundation Server

leave a comment »

Les comparto otras de las presentaciones a los interesados en una introducción sobre  Tips de Team Foundation Server, un servicio de gestión del ciclo de vida proyectos de SW, con el que podrás realizar no sólo el control de versión de tu aplicación, sino también el seguimiento de tareas realizadas y por hacer, asignacion de tareas entre los miembros de un equipo de desarrollo, etc.

Si estas interesado en una presentación del contenido del curso, puedes escribirme a: uialberto@outlook.com

View this document on Scribd

Saludos.

 

Written by Luis Alberto

15/08/2016 at 1:07 AM

Publicado en Artículos, Microsoft, UIBASOFT

Presentación Curso Entity Framework Basic

leave a comment »

 

 

Saludos.

A los interesados en capacitaciones o cursos de actualización, aquí les comparto la presentación del Curso Entity Framework Basic.

Si estas interesado en una presentación del contenido del curso, puedes escribirme a: uialberto@outlook.com

View this document on Scribd

 

Saludos.

 

 

Written by Luis Alberto

14/08/2016 at 11:12 PM

03 Principio de Sustitución de Liskov – SOLID

leave a comment »

Saludos.

Volviendo con las publicaciones de los principios SOLID. Hoy veremos el Principio de Sustitución de Liskov (LSP).

Si bien existen varios ejemplos en la web en la que podemos comprender de que trata este principio, me he quedado con este por ser un caso real en la que se puede presentar.

Revisemos el enunciado de Robert C. Martin.

“Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.” — Robert C. Martin

“Las funciones que utilicen punteros o referencias a clases base deben ser capaces de usar objetos de clases derivadas de éstas sin saberlo.”

Aún no quedo claro. ¿Verdad?

Si has comprendido el enunciado en tu primera lectura y no es necesario una explicación mas detallada al respecto, entonces eres genial. 🙂

 Pero existen varias definiciones al respecto, aquí algunas de ellas:

  1. Cada clase que hereda de otra puede usarse como su padre sin necesidad de conocer las diferencias entre ellas.
  2. Toda subclase debe soportar ser sustituida por su clase base lo que en términos de contratos significa que las precondiciones de los métodos de la subclase no serán más fuertes que las de la clase base, y sus pos condiciones no serán más débiles (en términos criollo: los métodos derivados no deben esperar más ni proveer menos que los originales).
  3. Las clases derivadas deben ser utilizables a través de la interfaz de la clase base, sin necesidad de que el usuario conozca la diferencia.

Claramente nos describen la importancia con respecto a crear clases derivadas y que estas deben ser tratadas como la clase base, es decir cuando creamos clases derivadas, hay que asegurarse de no reimplementar métodos que hagan que los métodos de la clase base no funcionen bien si al crear un objeto de la clase derivada se tratase como si fuera de la clase base. Para que se comprenda mejor, veamos el siguiente diagrama.

Principio de Substitución de Liskov

Diagrama clases – Explicación del Principio de Substitución de Liskov

Problemas:

Problema que rompre el 3er Principio SOLID

Violación al Principio de Substitución de Liskov

Tenemos un claro caso de violación del LSP con respecto a la definición 1, ya que la ejecución del método CalcularImpuesto generará una excepción de conversión de tipo si el objeto pasado por parámetro es de tipo Ciclomotor en lugar de Coche, pese a que ambas clases derivan de la misma clase base Vehículo.

Violación al Principio de Substitución de Liskov

Violación al Principio de Substitución de Liskov

Pese a que el compilador no genere ninguna excepción de conversión de tipo, esta clase aún viola el LSP. Esto es debido a que estamos forzando a un objeto Vehículo pasado como parámetro a comportarse como Ciclomotor o Coche.

Solución:

Solución a Violación del Principio de Sustitucion de Liskov

Solución a Violación del Principio de Sustitucion de Liskov

Agregamos un método virtual a la clase Vehiculo CalcularImpuesto que será reimplementado de acuerdo a la lógica requerida en cada una de las clases derivadas, así cuando la clase Impuesto requiera el cálculo en cada una de ellas pueda llamar al método implementado.

Implementación de la Solución a violación del LSP

Implementación de la Solución a violación del LSP

 

Es posible aplicar otras soluciones a este problema por medio del uso de interfaces, pero esto lo dejamos para futuras publicaciones.

Que sea de utilidad.

Hasta pronto.

Written by Luis Alberto

30/07/2013 at 11:29 PM

Portal Ingeniería Informática – Proyecto Tecnología Web

with 5 comments

Saludos amigos.

Con el fin de aportar con un granito de arena a los compañeros de Tecnología Web  les comparto el proyecto realizado en la materia durante el semestre 2/2010. El proyecto consistía en realizar el portal web para la carrera de Ingeniería en Informática, no es un proyecto estrella que digamos, pero me sirvió inicialmente para introducirme en la programación Web haciendo uso del lenguaje de programación PHP, y el cuál más adelante me sirvió como base para trabajar en mi proyecto de taller de grado: Social CRM.

A continuación les presento algunas capturas de pantalla:

Portada Principal

Portal Web Ingeniería Informática - UAGRM

Portada Principal Portal Web Ingeniería Informática - UAGRM

Página Módulo de Docentes

Módulo de Docente - Portal Web Ingeniería Informática - UAGRM

Módulo de Docente - Portal Web Ingeniería Informática - UAGRM

Ver más capturas de pantalla

Detalles del Proyecto

Nombre: Portal Web de la carrera Ingeniería en Informática

Lenguaje de Programación: PHP

Librerias: Smarty (Presentación), AdoDB (Datos)

Equipo de Desarrollo:

  1. Ariel Albarado Balderrama
  2. Miguel Angel Avalos
  3. Luis Alberto Baigorria Rodas.
Link de descarga:

Descargar Portal Web de Ingeniería en Informática

Password: UIBASOFT

Que les sea de mucha utilidad.

Hasta pronto!

Written by Luis Alberto

08/11/2011 at 11:02 PM

Publicado en Software Libre, UAGRM, UIBASOFT

A %d blogueros les gusta esto: