domingo, 7 de diciembre de 2014

Big Data & Hadoop & HDInsight

Hola amigos, el día de ayer 6 de diciembre de 2014, estuve en el evento CloudCamp Medellín organizado por Microsoft Colombia DX, en el cual estuve compartiendo sobre Big data en general, y acerca de una herramienta como lo es Hadoop, y obviamente compartiendo la propuesta por parte de Microsoft llamada HDInsight, la cual esta basada sobre Hadoop y nos permite tener una versión on premise y una versión en la nube, acá les dejo la presentación y espero sea de utilidad para ustedes. Saludos!


miércoles, 26 de noviembre de 2014

[EntityFramework] Usando EntityFramewok y sql Azure

Hola amigos, tuve el gusto de ser invitado a participar con un par de vídeos para la campaña #100DevDays de Microsoft Visual Estudio, realizada en el Channel9 Latam, en esta ocasión expliqué como usar EntityFramework y Sql Azure, aquí les dejo el vídeo y también puedes observar el paso a paso en este artículo: EntityFramework y Sql Azure

jueves, 20 de noviembre de 2014

Introducción a la arquitectura de software

Hola amigos, hace algún tiempo dicté una charla de introducción a la arquitectura del software, aquí les comparto la presentación, espero sea de utilidad. Saludos!


Introducción a Asp.Net MVC

Hola amigos, hace algún tiempo dicté una charla de introducción a Asp.Net Mvc, aquí les comparto la presentación, espero sea de utilidad. Saludos!


viernes, 14 de noviembre de 2014

[EntityFramework] Logueando e interceptando operaciones

Hola amigos, tuve el gusto de ser invitado a participar con un par de vídeos para la campaña #100DevDays de Microsoft Visual Estudio, realizada en el Channel9 Latam, en esta ocasión expliqué un poco acerca de intercepción de operaciones en EntityFramework, aquí les dejo el vídeo:

lunes, 20 de octubre de 2014

[Patrones] Implementando patrón repositorio - Repository pattern en C# Parte IV

En el artículo anterior observamos cómo crear los repositorios para MongoDB y para Asp.Net Web Api, ahora observaremos como consumir estos repositorios que hemos creado a lo largo de esta serie desde una aplicación, en este caso usaremos una aplicación web Asp.Net MVC, desde la cual consumiremos todos los repositorios. Entonces crearemos un módulo para administrar los empleados que recordemos están en una base de datos Sql Server, incluyendo sus datos de contacto que recordemos están expuestos en un servicios Web Api y un módulo para administrar los artículos escritos por estos empleados que recordemos están almacenados en una base de datos documental en MongoDB. Lo primero que vamos a hacer es crear un sitio Asp.Net MVC en Visual Studio, y una vez lo tengamos vamos a crear los controladores para el formulario de empleados y para el formulario de artículos, y obviamente vamos a crear sus vistas, teniendo una estructura como la siguiente:


Recordemos que nuestros controladores se comunicarán con nuestros repositorios, por lo cual los debemos referenciar a nuestro proyecto Asp.Net MVC, de esta forma vamos a utilizar todo el acceso a las diferentes fuentes de datos (Sql server, MongoDB y Web Api) y nuestra aplicación web no sabrá de donde provienen los datos y por ende estará desacoplada del acceso a datos. Visualmente tendremos un Crud bastante sencillo para los empleados y sus datos de contacto y un crud para los artículos como se aprecia en las siguientes imágenes:



Ahora veamos el código de nuestros controladores y como se comunican con los repositorios:

        private IEmpleadoRepository empleadoRepository;
 
        // GET: Empleado
        public ActionResult Index()
        {
            empleadoRepository = new EmpleadoRepository();
            var empleados = empleadoRepository.ObtenerEmpleados();
            return View(empleados);
        }
 
        // GET: Empleado/Details/5
        public ActionResult Details(string id)
        {
            empleadoRepository = new EmpleadoRepository();
            var empleado = empleadoRepository.ObtenEmpleadoPoId(id.ToString());
 
            var datosRepository = new DatosContactoRepository();
            empleado.DatosContacto = datosRepository.ObtenerDatosContactoEmpleado(id.ToString());
 
            return View(empleado);
        }
 
        // POST: Empleado/Create
        [HttpPost]
        public ActionResult Create(Empleado model)
        {
            try
            {
                empleadoRepository = new EmpleadoRepository();
                model.Id = DateTime.Now.Ticks.ToString();
                empleadoRepository.GuardarEmpleado(model);
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View(model);
            }
        }

Como podemos ver, en nuestro controlador de Empleados, en la acción Index creamos una instancia de EmpleadoRepository y hacemos uso del método ObtenerEmpleados, el cual se encarga de obtener los empleados almacenados en la base de datos Sql Server, recordemos que dicho repositorio implementa una interface y adicional hereda de un repositorio base, lo cual nos brinda la oportunidad de cambiar por otra implementación concreta en caso de que sea necesario.

De esta forma nuestros repositorios nos ayudan a aislar todas las operaciones de acceso a datos, por ejemplo en este caso, obtuvimos datos de Sql Server y adicional datos de un Web Api, y nuestra aplicación Asp.Net MVC no se dio por enterada de dónde salieron los datos. Ahora observemos el controlador para interactuar con los artículos escritos por los empleados que recordemos están en una base de datos No Sql como lo es MongoDB.


        private IArticuloRepository _articuloRepository;
 
        // GET: Articulo
        public ActionResult Index()
        {
            _articuloRepository = new ArticuloRepository();
            var articulos = _articuloRepository.ObtenerArticulos();
            return View(articulos);
        }
 
        // GET: Articulo/Create
        public ActionResult Create()
        {
            return View();
        }
 
        // POST: Articulo/Create
        [HttpPost]
        [ValidateInput(false)]
        public ActionResult Create(Articulo model)
        {
            try
            {
                _articuloRepository = new ArticuloRepository();
                _articuloRepository.GuardarArticulo(model);
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

Como podemos observar, de igual forma nuestro controlador de artículos se comunica solo con nuestro repositorio y en ningún momento sabe que los datos provienen o se llevan a una base de datos MongoDB.

Y bueno amigos, con esto damos por terminada esta mini serie sobre el patrón repositorio o repository pattern, espero que sea de utilidad para ustedes.

Artículos anteriores de la serie:

Implementando patrón repositorio - Repository pattern en C# Parte III
Implementando patrón repositorio - Repository pattern en C# Parte II
Implementando patrón repositorio - Repository pattern en C# Parte I

Este ejemplo lo puedes descargar de mi repositorio en GitHub

Saludos, y buena suerte!

miércoles, 24 de septiembre de 2014

Apis, construyendo una nueva era

Hola amigos, les quiero compartir la edición número 45 de la revista Software Gurú, en la cual tuve la oportunidad de escribir un artículo acerca de la era de las Apis, espero sea de su interés y agradezco la invitación por parte de la revista para contribuir en esta edición.