on martes, 27 de noviembre de 2012
Ahora ya tenemos referenciada lo que es la capada de datos y la capa de negocios, lo que sigue ahora es cargar la capa de negocios con la vista y así es como se interactuara con la capa de negocios.

En esta primera ocasión utilizaremos las prehistóricas pantallas de WindowsForm.



LoginPrueba - Microsoft Visual Studio (Administrador)_2012-11-27_22-14-17


después tenemos que ocuparnos en nuestra cadena de conexión  para lo cual, en nuestra capa de datos tenemos un archivo de configuración llamado app.config


LoginPrueba - Microsoft Visual Studio (Administrador)_2012-11-27_22-00-16


dentro de este archivo, tenemos un documento xml, en lo cual, en el tag de connectionString, tenemos que poner nuestra configuración de nuestra base de datos.


Source=127.0.0.1 <- indicando que nuestra base de datos esta en localhost.
Catalog=PruebaProgramacionEnCapas <- el nombre de nustra base de datos
ID=sa <- usuario de base de datos
Password=******"  <- password de usuario de base de datos


 <?xml version="1.0" encoding="utf-8" ?>  
 <configuration>  
   <configSections>  
   </configSections>  
   <connectionStrings>  
     <add name="LogicaDeDatos.Properties.Settings.PruebaProgramacionEnCapasConnectionString"  
       connectionString="Data Source=127.0.0.1;Initial Catalog=PruebaProgramacionEnCapas;User ID=sa;Password=******"  
       providerName="System.Data.SqlClient" />  
   </connectionStrings>  
 </configuration>  

hecho esto tenemos listo nuestro archivo de configuración inicial de base de datos.


on lunes, 26 de noviembre de 2012
Que tal, este es la continuación de una serie de entradas, con el fin de mostrar un ejemplo de como separar en capas una aplicación en c#,  ahora toca turno de definir los controladores en la capa de la lógica de negocios.

Lo primero que tenemos que hacer, es agregar la referencia de nuestra capa de datos llamada DataLayer, a nuestra capa de negocio.

solo basta con seleccionar el proyecto:


LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-20_13-45-46


Ahora solo agregamos la referencia:

LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-20_13-58-28

La seleccionamos y aceptamos.

LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-20_13-59-34

Ahora tenemos que agregar una nueva referencia, no se si recuerdan que agregamos los dbml de linq to sql, peus bien, al agregar este item, por default se agrega una libreria, que es System.Data.Linq


LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-20_14-21-34



Ahora tenemos que agregar una nueva referencia, no sé si recuerdan que agregamos los dbml de linq to sql, pues bien, al agregar este item, por default se agrega una librería, que es System.Data.Linq.

¿Pero se estarán preguntando por que agregarla a la capa de lógica de negocios?
Esto es muy sencillo de responder, y es que dicha capa se encarga de crear los contextos entre la capa de datos y la capa de negocios, permitiendo que el tiempo de conexión entre las capas dure únicamente entre algún proceso de la lógica de negocios.

Si no les quedo muy claro lo último, se comprenderá un poco mas adelante.





ya para finalizar con las referencias de nuestro proyecto, tenemos que agregar la referencia de nuestra capa de negocios llamada BusinessLogicLayer.

LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-22_00-28-55

LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-20_13-58-28

Agregar referencia_2012-06-22_00-33-29

y ya con esto terminamos de agregar las referencias a nuestro proyecto
on sábado, 24 de noviembre de 2012
En esta ocasión se creara el mapeo de datos con linqToSql, se que para el framework 4.0 ya tenemos una tecnología tipo ORM mucho más flexible que es el Entity Framework, en esta ocasión utilizaremos LinqToSql porque queremos obtener algo sencillo ya que es para algo pequeño, si deseamos construir algo más grande y robusto y si se busca una mayor flexibilidad, se recomienda usar el Entity Framework.

recuerdan el proyecto que creamos para la capa de datos, el que se llamo DataLayer, pues bien, agregaremos un nuevo elemento llamado clases de linq to sql.


LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-19_14-44d-15


y asi es como se ve cuando lo vamos a agregar.

Agregar nuevo elemento - DataLayer_2012-06-19_15-12-27

Los archivos .dbml están compuestos por dos tipos de archivos, un .dbml.layout y un designer.cs, al monento de hacer el mapeo, se sobrescriben estos archivos generando la capa de datos.

Se recomienda no modifcarla.

LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-19_15-17-07



Para agregar nuevas tablas, tenemos qeu darle click en el archivo .dbml y nos saldra este recuadro, solo damos click al explorador de servidores.

LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-19_15-17-50
Esta imagen que tenemos abajo, es el explorador de servidores, lo que tenemos que hacer aquí es conectarnos a una base de datos.

LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-19_15-18-22

Para agregar una conexión, tenemos que poner el nombre del servidor, si lo tienen localhost, solo bastara con poner la dirección ip 127.0.0.1 que es precisamente la del localhost, tambien pueden poner el nombre de su maquina, tambien tienen que autenticarse a la base de datos, se recomienda el tipo de autenticación de
SQL Server para no batallar con los connectionStrings.

No olvidemos seleccionar la base de datos a la cual vamos a seleccionar nustras tablas para el mapeo automatico. 
LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-19_15-20-03

Una vez configurada nuestra conexión, damos click en aceptar y nos aparecerán todas las tablas que contiene la base de datos.
LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-19_15-20-50

ahora solo basta con agregar la tabla al archivo .dbml y listo, nos aparecerá el siguiente dialogo avisándonos que nuestra cadena de conexión no esta encriptada, solo damos click en aceptar.
LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-19_15-22-24

y ya con esto debemos tener el mapeo listo =)


LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-19_15-23-03

si no  has visto la parte no. 1 de este post, te invito a que lo hagas: Programacion en capas No. 1

Que tal, en este primer apartado del ejemplo de programación en capas crearemos la base de datos y la tabla usuarios, dicha tabla de momento nos servirá para la demostracion.

Primero que nada creamos nuestra base de datos de prueba. Nuestra base de datos sera en Sql server 2008, para esto necesitamos el sql managment studio express o profesional, cualquiera de los dos servirá
.

                              create database PruebaProgramacionEnCapas


ahora vamos a crear la tabla de usuarios.

create table Users
(
    userId int primary key identity,
    userName varchar(255) not null,
    password varchar(255) not null,
    unique(userName)
)


Como podemos observar, el nombre de usuarios tiene un constraint de tipo Unique, que nos permite que exista solo un nombre de usuario a la vez, esto con el fin de no duplicar dichos nombres de usuario ya que puede causar inconsistencias en la base de datos.

Lo que sigue a continuación es crear nuestro proyecto de visual studio, en este caso abrimos el visual studio 2010 y creamos un nuevo proyecto windows form, al que llamaremos LoginPrueba.


Una vez creado nuestro proyecto windows form, agregamos un nuevo proyecto de librería de clases llamado DataLayer y otro BusinessLogicLayer.


Agregar nuevo proyecto_2012-06-23_11-18-50

nuestro proyecto deberia de lucir asi:


LoginPrueba - Microsoft Visual Studio (Administrador)_2012-06-19_14-44-15


leer la introducción de programacion en capas con c#


Que tal, ya tenía muchas ganas de escribir algo sobre la programación en capas, ya que es un tema polémico que se habla mucho en Internet, pero que sin duda es dificil encontrar material fácil de digerir cuando uno es novato.

Cuando comencé a desarrollar mis primeros programas, llegue a escuchar en más de una ocasión, el tema de separar en varias capas un sistema, ya que te garantizaba una serie de ventajas que sonaban prometedoras y que sin duda era una solución a problemas comunes.

De entrada suena bien, se escucha interesante, pero me preguntaba cómo se hacía, la gente decía que era sencillo pero sinceramente no podía aplicar separar el código en diferentes capas de abstracción tal como lo pintaban. Y buscaba en Internet y encontraba muchos posts con información pero no encontraba un tema digerible para un novato como yo.

Hoy en día hay más material que antes, eso es totalmente cierto, pero sin duda quiero compartir una forma sencilla de cómo hacerlo.



Escenario.

Front.
Login Web, escritorio (wpf y windowsForm) y consola.

Backend.
linq to SQL y SQL Server 2008.

El objetivo de la separación en capas debe ser capaz para aislar la lógica de negocios, la vista y los datos.
Interesante video sobre Fibonacci y su secuencia y su explicación de como es considerado un fractal.

on martes, 20 de noviembre de 2012


Que tal, los que han usado c++, pascal, c o cualquier lenguaje de programación con acceso a la memoria RAM, es muy probable que estén familiarizados con los punteros o apuntadores, y para todos aquellos programadores de la nueva escuela que comenzaron usando c#, no tienen ni la mas remota idea de que son los punteros, ya que este lenguaje los oculta y hace transparenté el uso de estos.

Sin embargo, es necesario conocer en que momento son usados estos punteros en c#, ya que son totalmente transparentes para el programador.


Analicemos el siguiente bloque de código:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace aplicacionPunteros
{
    class Program
    {
        static void Main(string[] args)
        {
            Punto punto = new Punto(2, 4);
            Punto punto2 = punto;

            punto2.X = 888;

            Console.WriteLine(punto.X);
            Console.WriteLine(punto.Y);


            Console.WriteLine(punto2.X);
            Console.WriteLine(punto2.Y);

            Console.ReadKey();
        }
    }

    class Punto
    {
        public int X { get; set; }

        public int Y { get; set; }

        public Punto()
        {

        }

        public Punto(int x, int y)
        {
            this.X = x;

            this.Y = y;
        }
    }
}



Tenemos declarados dos objetos:


 Punto punto = new Punto(2, 4);
 Punto punto2 = punto;

al primero objeto  llamado punto se le están declarando un valor en X = 2, Y = 4, ahora bien, con el fin de establecer claro el ejemplo, declaramos un segundo objeto llamado punto2, y a continuación se le hace la asignación de punto. y se modifica la propiedad X a punto2

cuanso se asigna un objeto de la misma clase, algunas personas piensan que se realiza una clonacion del objeto, pero no es asi, lo que se esta haciendo es pasarle la referencia de su direccion de memoria en la cual esta almacenado el objeto, veamos graficamente:

tenemos la memoria RAM y al momento de hacer esta instruccion:

Punto punto = new Punto(2, 4);

estamos reservando ya sea en la memoria RAM o en el Heap.


memoria ram
y al momento de asignar al objeto punto2 el objeto punto, se aplica la misma teoría que en c++, y es donde se aplican los punteros.

es por eso que no piensen que un objeto es clonado a la hora de la asignacion, si no que es el mismo objeto.

ahora veamos el resultado de la corrida del programa anterior.








consola 

pero los dos valores fueron iguales, esto se debe a que cuando  se realizo el siguiente codigo:

Punto punto2 = punto;

punto2.X = 888;


punto fue asignado a punto2, y luego punto2.X se le asigno un nuevo valor, por lo tanto, punto2, esta haciendo referencia a la direccion de memoria donde fue instanciado el objeto punto.
on jueves, 1 de noviembre de 2012


Este sin duda es un tema muy polémico y quisiera aclarar que mi objetivo no es ofender a nadie, si no proporcionar un punto de vista de lo que ocurre en algunas consultoras de software.

Sin duda,  cuando nos dan un sistema heredado para corregir un bug, lo primero que hacemos es encontrar  el error y corregirlo, pero que pasa realmente con ese parcheo, realmente era solo un bug o una señal de que hay vicios ocultos en la aplicación.

Hace un año corregir bugs era el peor de mis miedos en el trabajo, sin duda era por que tenia que enfrentarme a código que no era mio, incluso en varias ocasiones (en la mayoría) era código que no estaba identado, no estaba comentado, no tenia buena nomenclatura, no tenia buena lógica e incluso en algunos casos estaba mas parchado que una llanta de bicicleta, incluso sistemas que se volvían en el antipatrón Stovepipe system, su traducción al español seria sistema parchado.

En mi antiguo trabajo cuando se presentaba un modulo tipo Stovepipe, me presentaba a proponer rehacer el código y codificarlo de acuerdo al proceso de la aplicación. Era increíble que su respuesta fuera que no había tiempo y que solo lo parchara.

Era increíble el desgaste que deja el navegar por un sistema Stovepipe , estar revisando el código y checando la secuencia de su flujo, y lo triste era darte cuenta que ya habían pasado otros desarrolladores y el sistema también se había convertido en un fabuloso y estupendo código espagueti (otro antipatron de diseño).

En conclusión, es más tardado parchar que rehacer código, por que en mi nuevo trabajo, me a tocado corregir módulos, y se a optado en rehacerlos, y el tiempo casi es el mismo solo que ya queda mucho mas estructurado el código y sobre todo, que cumple con el requerimiento.

Cuando se trata de corregir bugs en un sistema bien estructurado, a lo mucho hay que validar objetos nulos, variables mal asignadas, operaciones de mas, manejo de componentes, entre otras cosas.

En conclusión, si el sistema esta asquerosamente mal, hay que pensar en rehacer partes principales acordes al requerimiento. Y si el sistema esta bien hecho, solo hay que corregir esos bugs.

Database workbench

Database workbench es un poderoso manejador de base de datos que te permite gestionar diferentes tipos de servidores de base de datos (MSSql, MySql, Firebird, Interbase), sin duda es de mi agrado ya que te permite utilizar una variedad de herramientas para la gestión de las bases de datos.

pueden descargar una version tial del siguiente sitio:
http://www.upscene.com/