Busqueda local

Loading

lunes, 14 de noviembre de 2011

MVP en ASP.NET usando Entity Framework (3 de 3)

Puede parecer muy ingrato de parte de nuestros usuarios, pero a ellos solo les interesa que nuestra aplicación sea fácil de manejar, rápida y que no tenga errores. Todo lo que hagamos en las capas que ellos no ven, no tiene importancia, mientras no falle…
Crear una interface que sea fácil de usar y que sea intuitiva (termino de moda) resulta en muchas horas de programación, para dejarla a punto…

viernes, 11 de noviembre de 2011

MVP en ASP.NET usando Entity Framework (2 de 3)

En un artículo que publique en Marzo de este año, hable del patrón Service Locator, en ese entonces les presente un ejemplo cuyo contexto podía parecer un poco forzado o abstracto, en esta ocasión usaremos el mismo patrón para nuestro ejemplo de MVP.
Y veremos de qué forma interactuar con el proyecto de presentación…

jueves, 10 de noviembre de 2011

MVP en ASP.NET usando Entity Framework (1 de 3)

Ya hemos visto la arquitectura de capas basada en el patrón MVP con dos ejemplos previamente, en el primero use LINQ to SQL para el acceso a datos, en el segundo  use ADO.NET y en esta ocasión vamos a usar el Entity Framework...
Como siempre tratando de aplicar algún patrón dentro del ejemplo…

lunes, 7 de noviembre de 2011

Capas con Entidades relacionadas (3 de 3 )

Según Wikipedia, una API, es una interface programable de una aplicación, es un conjunto de reglas y especificaciones que facilitan la interacción con estas. Este tipo de interfaces nos permiten ofrecer la solución que lleva a cabo nuestra aplicación, para que pueda ser usada por otras aplicaciones, de una manera sencilla.

Lo que estamos haciendo al codificar nuestra aplicación usando capas para colocarlas en ASP, nos coloca en una interesante posición con respecto a las APIs; al lograr que nuestras capas no sean cohesivas, podemos prepararnos para tener nuestra propia API.

viernes, 4 de noviembre de 2011

Capas con Entidades relacionadas (2 de 3)

Esta es la segunda parte del artículo donde se ejemplifica como usar la arquitectura de capas con entidades relacionadas.

Ya hemos presentado en el articulo previo la capa del doman Model, aun que aun debe ser modificada para incluir todos los controles que se requerirán por los cambios que introduciremos; además en esta segunda parte vamos a terminar con las capas superiores de este modelo.

martes, 1 de noviembre de 2011

Capas con entidades relacionadas (1 de 3)

Para quienes hemos estado por muchos años escribiendo código y hemos vivido la evolución de las plataformas y la aparición de Frameworks, así como la sublimación de los patrones, siempre nos queda un lastre, cuando se debe implementar una solución.
Simplemente creemos que sabemos cómo hacerlo, basándonos en lo que sabíamos hacer…

lunes, 31 de octubre de 2011

Ejemplo ASP.NET en capas (3 de 3)

Una vez que hemos armado las tuberías de comunicación a la base de datos, podemos movernos un poco más arriba, en esta ocasión vamos a crear una capa que controla la comunicación entre la interface de usuario y la capa de servicios.
Me refiero a la capa de Presentación…

viernes, 28 de octubre de 2011

Ejemplo ASP.NET en capas (2 de 3)

Hasta este momento ya hemos creado la capa del Modelo de Dominio, y estamos listos para empezar la codificación de la capa intermedia; esta capa también llamada de Servicios, es la encargada de crear el vínculo de comunicación entre la capa a nivel de usuario y la capa de datos.
Su responsabilidad incluye todo aquello que se requiera para trasladar los datos en ambos sentidos, incluso las conversiones entre una vista y otra…

jueves, 27 de octubre de 2011

Ejemplo ASP.NET en capas (1 de 3)

Para poder entender algo tan abstracto y nuevo, será necesario que llevemos a cabo la creación de un ejemplo donde podamos ver de qué manera los patrones afectaran la estructura de nuestro proyecto.
El ejemplo es simple, pero que nos permite ver como se crean las capas…

miércoles, 26 de octubre de 2011

ASP.NET sobre capas

La solución que ofrece Microsoft al problema del código mezclado es el Code Behind. Una forma al parecer simple de separar el código HTML del código VB o C#, en un archivo aparte.

Este archivo aparte contiene código que responde a los eventos que se disparan en la interface, y al final termina siendo una forma disfrazada de SMART UI, debemos romper ese vicio….

martes, 25 de octubre de 2011

Como determinar que patrón usar.

Conocerlos y haberlos usado en alguna ocasión o por ejemplos, no es suficiente para poder determinar cuál sería el patrón que mejor se adapta a nuestro problema, incluso podría no ser necesario usar alguno.

Según mi propia experiencia puedo darles algunas ideas…

lunes, 24 de octubre de 2011

Anti patrón Smart UI.

Quien no ha escrito una aplicación urgente agregando controles a una página o formulario y por la facilidad que nos ofrecen las herramientas de desarrollo como Visual Studio, agregamos código a los eventos en la misma interface, después de todo es algo rápido y no va a servir más que para esta vez.

Además si lo podemos hacer, es porque la herramienta lo permite, entonces no debe ser mal, no? Pues no es así, es una mala práctica que no debemos repetir…

martes, 11 de octubre de 2011

Andamios?

En la versión anterior de MVC de Microsoft, la 2.0 encontré en repetidas ocasiones la palabra Scaffolding. La traducción literal es ANDAMIO, a pesar que investigue sobre ella, la tecnología en ese momento era más limitada.

En MVC 2 podemos crear automáticamente los Controllers y las Vistas con un simple clic en el lugar apropiado. En la nueva versión MVC 3 los programadores han ido mas allá, permitiéndonos crear de forma automática el código del cual podemos partir.

Si la versión anterior me pareció un gran avance, esta nueva versión es mucho mejor.

jueves, 19 de mayo de 2011

DisposeCurrent

En las aplicaciones que desarrollamos siempre debemos tener en cuenta la posibilidad de quedarnos sin memoria; aun que casi siempre le dejamos esta tarea a nuestro buen amigo El Garbage Collector.
Lo cierto es que no podemos predecir en qué momento va a pasar a nuestra puerta a recoger la basura. Así mismo el Recolector no podrá realizar su trabajo adecuadamente si le ponemos una cadena y un candado a nuestro bote de basura, no creen?

martes, 12 de abril de 2011

Image Handler (MVC y WebForms)

En una aplicación web , cualquier pista que le permitamos obtener a un hacker, es suficiente para que tengan alguna idea de cómo está organizado nuestro sitio, o simplemente saber cuál es el sistema operativo, etc. Algo tan simple como la ruta de una imagen al ser obtenida del sitio puede ser suficiente.
 

lunes, 11 de abril de 2011

Que tanto debo documentar mi código?

Al igual que todos aquellos que sintieron curiosidad por este tema, yo también soy Desarrollador, disfruto solucionando problemas, y no me canso de agregar código a mi aplicación…pero si alguien se atreve a pedirme que agregue documentación a mi código, siento que debo levantarme de mi lugar e irme. Sonrisa

jueves, 7 de abril de 2011

Diferentes objetos una sola colección

A veces nos hacemos una idea y nos aferramos a ella, a veces creemos que algo es posible y nos sentimos motivados cuando avanzamos en la solución y vemos que lo que nos imaginamos se va materializando frente a nuestros ojos. A veces este tipo de situaciones crean un espejismo que nos impide ver lo que en realidad estamos haciendo. Hoy me enfrasque en una tarea que me llevo a codificar un ejemplo para verificar que si era posible lo que me estaba imaginando.
 

martes, 5 de abril de 2011

DropDownList en MVC

Desde que empecé a trabajar con las versiones beta de MVC, me tope con un reto que no le encontraba ni pies ni cabeza. Algo que siempre fue simple en ASP, resulto ser complicado en MVC. O al menos a si lo parecía. Así es, llenar un combo o Lista desplegable en MVC requería pasos extra, para poder completarse. Cuando vienes de un entorno donde todo se basa en controles y nos limitamos a llenarlos con el resultado de una consulta, el entorno MVC resulta confuso al principio.

viernes, 1 de abril de 2011

Validación

Ya que hemos emprendido este camino de tratar de hacer las cosas de la mejor forma, no hay vuelta atrás. A partir de que cruzamos esa línea, nos cuestionaremos todo; sin embargo no es malo, por el contrario, resulta ser un proceso de madurez que al ser acompañado por aprendizaje, resulta motivador.
A veces los temas son conceptuales, y colisionan con nuestros conocimientos y principios sobre algo que ya sabemos, con lo que hemos estado trabajando desde siempre y que de repente se ve inmerso en una lista de dudas; por ejemplo ayer en una plática con el equipo de desarrollo, surgió la pregunta…

miércoles, 30 de marzo de 2011

RefreshMode en el EF

El EF es una de las herramientas más poderosas con las que he tenido que trabajar usando tecnologías de Microsoft, sus alcances son muy interesantes, nos ofrece innumerables funcionalidades y mecanismos; a tal grado que cada día podemos descubrir algo nuevo, algo que no sabíamos, pero también puede ser un dolor de cabeza cuando no sabemos por dónde empezar.
La mayor parte del tiempo, damos por sentado que la herramienta hará todo por nosotros y pocos somos lo que nos interesamos en saber como lo hace.

lunes, 28 de marzo de 2011

Facade Pattern

La primera vez que escuche la palabra Facade en una reunión donde se hablaba de sistemas, me pareció un concepto fuera de lugar o al menos que se usaba con la intensión de ser presuntuoso. Sobre todo porque la persona que lo estaba usando en la junta, no es una persona que se dedique a escribir código…al ser teórico, sabe términos, pero no siempre sabe aplicarlos en el momento adecuado. En fin, la situación termino con una búsqueda en internet.

jueves, 24 de marzo de 2011

Command Pattern

En programación no cabe duda, que podemos hacer las cosas de muchas maneras; cuando daba clase de programación, le permitía a mis alumnos presentar diferentes soluciones para el mismo problema. Sin embargo conforme van madurando el código debe ser más eficiente, mas escalable, más robusto. Esto requiere que antes de inventar la rueda, investiguemos a ver si no ha sido inventada aun.

miércoles, 23 de marzo de 2011

Ensamblados con Model Incrustado II

Después del post previo en el que explique cómo logre que funcionara en MVC un Model Incrustado en un DLL; tratamos de aplicar el mismo truco para otro proyecto, un Framework, que está formado de varias bibliotecas, cada una con su Model independiente incrustado, pero no funciono.

lunes, 21 de marzo de 2011

Ensamblados con Model incrustado

En este blog Hemos hablado de aplicaciones que usan un solo Model del Entity Framework. Sin embargo en la vida real, esto no es así de simple. Casi siempre los proyectos deben incluir bibliotecas, y estas pueden ser desarrolladas por varias personas, lo que ocasiona que cada proyecto pueda tener su propio Model.

domingo, 20 de marzo de 2011

MVC Security

Después de explicarles como se implementa el Membership  de haber hablado de OWASP  lo correcto es hablar de las formas en que podemos agregarle seguridad a nuestro sitio MVC. Si eres de aquellos que se han preguntado cuales serian las mejores practicas para implementar la seguridad usando este patrón, creo que este post te parecerá interesante.
Después del tiempo que le he dedicado creo que tengo un entendimiento de los proyectos MVC suficiente, para poder explicar como hacerlos; sin embargo el tema mas dedicado dentro de todo lo que aquí les h hablado esta relacionado con la seguridad. Un sitio web que no tenga el mínimo de protección, esta expuesto a ser hackeado solo por el gusto de hacerlo.

viernes, 18 de marzo de 2011

Patrón de estados?

Desde que empecé a codificar el ejemplo que acompaña a este post, he tratado de recordar algún proyecto importante donde no se requiriera el manejo de estados en algún punto del sistema. Lo cierto es que cuando debemos programar un escenario donde los estados de algún componente, deben ser controlados para poder determinar la lógica a seguir, siempre resulta complejo organizarlos y determinar la secuencia correcta. Sin embargo, lo más complejo no reside en determinar esa secuencia, sino en controlar que la secuencia se aplique adecuadamente, considerando sus desviaciones.

miércoles, 16 de marzo de 2011

Composite Pattern

Como ya hemos visto en post previos, usar patrones puede hacer nuestro código, más limpio, más eficiente. Hemos visto que al usar los patrones como plantillas predefinidas para nuestras clases, podemos realizar la tarea de desarrollo con más seguridad y en menor tiempo.
En los ejemplos que aquí se presentan se expone la situación para la cual se decidió usar dicho patrón, puesto que los patrones no pueden ser usados en todas las situaciones, mas ben es identificar en nuestro proyecto en donde aplica un patrón. Sobre todo porque es mejor idea usar algo que ya está probado, que empezar desde cero.

martes, 15 de marzo de 2011

Prototype Pattern

En los últimos post, he presentado ejemplos usando patrones creacionales, aun que son similares, cada uno tiene una razón diferente por la cual existe. Nuestro invitado de hoy es mi tercera alternativa para volver al mismo problema de crear páginas web. En esta ocasión el patrón Prototype, nos ofrece una aproximación diferente, donde el objetivo es evitarnos el proceso de crear la nueva instancia, ya que se emplea una sola instancia del objeto, a manera de prototipo, y a esta instancia se le realiza la clonación, y con algunos cambios, tendremos un nuevo objeto.

lunes, 14 de marzo de 2011

Builder Pattern

Este patrón pertenece al grupo de los creacionales, junto con el Factory y el Singleton, de los cuales hemos hablado en otros post. Podemos empezar por decir que si lo compramos con el Factory, podrían resultar muy parecidos, ya que ambos se concentran en el proceso de crear instancias de objetos, para que sean usadas por otros. Sin embargo el Factory se concentra en el QUE se está creando, mientras que el Builder se concentra en él COMO.

Clasificación de los Patrones

Desde hace algunas semanas he estado trabajando con patrones y he publicado algunos post donde hablo de ellos, incluso publique un post donde brevemente explico que son, lo puedes leer aquí.
Pero me falto hablar de cómo se clasifican, así que en este breve post voy a presentarles un breve resumen, de cómo se clasifican y cuales pertenecen a cada clasificación.
Algunos ya fueron ejemplificados en este Blog, porque ya los he usado en algún proyecto, y mi intensión es que en este Blog solo haya Post donde hable de código que sea resultado de mi experiencia personal.

domingo, 13 de marzo de 2011

Copiar Objetos

Antes de las clases, copiar una variable era tan simple como usar el signo de igual entre las dos variables, con lo cual el valor almacenado en la variable que se encontraba a la derecha del símbolo se le asignaba a la variable que se encuentra a la izquierda del símbolo. Todo era muy simple. A continuación comentare los mecanismos relacionados con la copia de objetos, a manera de preámbulo para un posterior Post, donde hablare del Patrón Prototype.
 

sábado, 12 de marzo de 2011

Random

Recientemente descubrí que lo que por mucho tiempo creí que era aleatorio, resulta no serlo. Así la clase Random, en realidad genera números pseudo-aleatorios, ya que en realidad usan una formula matemática, por lo que podría ser predecible, es algo que no me había afectado, y me había servidor en muchas situaciones; sin embargo en un proyecto reciente, no fue suficiente usar Random en .NET.
Probé desde lo más tradicional con la clase Random y el método Next hasta lo más moderno con LINQ, sin embargo mi problema no se solucionaba.
 

viernes, 11 de marzo de 2011

Sort

Dentro de mis estudios me han apasionado varios tópicos, algunos ya los he comentado en este Blog, pero hay uno que no he nombrado siquiera, sin embargo cuando me los presentaron resultaron ser un reto muy interesante.
El concepto parece sencillo, tanto que de forma ingenua podríamos intentar escribir un algoritmo innovador, algo que nadie haya descubierto, sin que tengamos las bases, de lo que ya existe.
Me refiero a los métodos de ordenamiento, hay muchos algoritmos que se han creado o han tenido popularidad en cierto momento, sin embargo, es bien cierto que no todos sirven para lo mismo. Así que no basta con saber implementar uno, hay que conocer los otros para estar preparado antes los retos de programación que debemos resolver.

miércoles, 9 de marzo de 2011

HTTP y ASP.NET (WebForms y MVC)

A través de los años he trabajado con las diferentes versiones de ASP que ha liberado Microsoft; cuando se introdujo .NET el cambio fue muy interesantes, sobre todo si tenias años de quejas en contra de las versiones anteriores y a partir de ahí, los cambios han ido cada vez más rápido. Cuando apareció MVC en el escenario, me pareció que todo lo que por tanto tiempo había usado para hacer sitios, ya no servía para nada. Sin embargo solo se trata de diferencias. Para poder entender las principales diferencia entre las WebForms y MVC, es necesario saber cómo funciona Internet.

martes, 8 de marzo de 2011

Membership

Dentro del ASP.NET podemos obtener una característica que representa uno de los procesos que siempre debemos desarrollar en cualquier aplicación: Membrecía. Así es, cuando desarrollamos un sitio web, debemos proveer algún mecanismo por medio del cual un aspirante a ser usuario pueda registrarse, este mecanismo debe ser seguro, y flexible.

lunes, 7 de marzo de 2011

Yield

Como programador, me resulta atractivo que un lenguaje ofrezca un mecanismo que representa un atajo, que por sí solo nos permita realizar alguna acción, que de otra forma sería más compleja de codificar.
Lo malo es cuando esa funcionalidad, existe en un lenguaje y en el otro no; y que al aprender a usarla en el que si la tiene, consideras que sería bueno tenerla en el otro. Este es el caso del Yield Return, existe en C# y no existe en VB.
 

viernes, 4 de marzo de 2011

Service Locator

Introducción

Cuando descubrí MVC en la plataforma ASP.NET, descubrí los patrones, fue cuando conocí a Martin Fowler. Quien a pulso y con mucho trabajo en pro de las metodologías, la arquitectura de software y los patrones, se ha convertido es su represéntate mundialmente reconocido; todo lo que dice sobre estos temas casi es ley. Al menos eso parece, ya que en todos los sitios donde he investigado, usan referencias a su sitio, lo citan como refuerzo de lo que dicen, incluso Microsoft.

jueves, 3 de marzo de 2011

Seguridad

owasp
Desde que empecé a escribir código para aplicaciones de escritorio, sentí fascinación por los mecanismos de seguridad, siempre me interesan los temas relacionados con Hackers; porque me resulta muy interesante saber que hicieron, aun que pocas veces se conocen los detalles de cómo lo hicieron.
Cuando descubrí el Internet y el desarrollo en ese entorno (que fue usando ASP y Cold Fusion) he sabido de toda clase de ataques que se implementan sobre sitios Web que se supone deberían ser seguros.

miércoles, 2 de marzo de 2011

ASP.NET Session

Lo primero que debo decir es que si nuestra aplicación debe estar en la WEB, entonces empezamos con un reto interesante. Puesto que la web no tiene estado, cada vez que solicitamos una página a un servidor, esta debe crearse, el protocolo que se emplea en Internet es el HTTP y este protocolo no permite conservar información entre pagina y pagina.

martes, 1 de marzo de 2011

DTO

Ayer mientras investigaba y escribía sobre los anti-patrones, me llamo la atención un que parecía referirse a los view models. Me refiero al Vagón Gitano, ya que en la descripción habla de un objeto cuya única funcionalidad es llevar datos de un lugar a otro, o sea su razón de ser consiste en existir para llevar información.

lunes, 28 de febrero de 2011

Modificadores de Clase

Cuando se trabaja revisando el código de otras personas, para verificar funcionalidades, por lo general nos preocupamos por validar que el código realice las tareas que se determinaron en los requerimientos.
Es muy fácil perder de vista aspectos importantes al codificar, como son los estándares y las buenas prácticas. La calidad de software al nivel del código, radica en que nuestro código este escrito aprovechando las ventajas que nos ofrece el lenguaje que empleemos.

Anti-Patterns

Para poder entender el concepto, primero debemos entender lo que es un patrón, en una definición muy simple, un patrón es una forma reutilizable para resolver, problemas recurrentes en el desarrollo de software. Como si fuera una plantilla que podemos aplicar a otro problema para solucionar su implementación.
Un Anti-patrón es un patrón, que es usado comúnmente, pero que resulta ser ineficiente, no es efectivo y puede hasta resultar contraproducente en la práctica. Esto quiere decir que no basta con que mucha gente lo utilice, eso no lo hace un patrón.

viernes, 25 de febrero de 2011

Cuando usar Throw new Exception

A diferencia de lo que muchos piensan, la recomendación de los expertos con relación al manejo de las excepciones, es que deben atenderse al más bajo nivel, o sea, donde se genera la excepción, ya que es ahí, donde tiene sentido la información y es ahí donde se puede manejar adecuadamente. La lógica más simple seria: Analiza si puedes evitar que la excepción deba subir, si no se puede súbela.

jueves, 24 de febrero de 2011

Dilema EF o SP

EF (Entity Framework) o SP (Store Procedures).
En este punto es necesario hacer algunos comentarios en relación con la pregunta más compleja que me han hecho sobre el uso del EF.
Programar usando EF, Es mejor que usar Store Procedures con DataSets?

EF Query

Lo primero y lo más importante que debemos saber cuando hacemos consultas sobre el EF, es que estas consultas no se realizan sobre la Base de Datos, las consultas que realizamos se ejecutan contra el Modelo de datos.
Otro dato que debemos saber es que para poder usar un motor de base de datos, debemos usar un proveedor, este proveedor es el encargado de convertir nuestras consultas en algo que pueda entender el motor de la base de datos y es el mismo el que se encarga de convertir la respuesta en los objetos que nuestra aplicación puede manejar.

EF Connection String

Cuando se crea el EDM, se crea al mismo tiempo un archivo por medio de la herramienta llamada: EntityModelCodeGenerator, mismo que es agregado a nuestro proyecto. El nombre de este archivo emplea un estándar muy simple, se trata de la combinación del nombre que le hayas agregado a tu EDM, al cual se le añade la palabra designer.
Debido a que este código es generado, no es recomendable hacer modificaciones a este archivo, ya que si necesitamos volver a generar el EDM, por algún cambio en la Base de datos, entonces estos cambios se perderían.

miércoles, 23 de febrero de 2011

Iterator Pattern II

Este post es la continuación de uno previo, puedes leerlo aquí.
Continuación...

Iterator Pattern I

Cuando programaba con VB 6 codificaba pseudo clases, ya que no era posible crear clases como tales, por lo que era necesario recurrir a algunas técnicas, para poder simularlo. Creábamos pseudo clases, que ahora puedo descubrir que eran cohesivas. Por ejemplo: un ticket para cobrar en algún punto de venta.
Tenía una pseudo clase Ticket, que internamente tenía una colección de Conceptos. A través del la clase Ticket exponíamos métodos para agregar conceptos a esta colección o eliminarlos, o recorrerlos para realizar cálculos, etc.

martes, 22 de febrero de 2011

Custom Validation Rules

En MVC es posible agregar reglas de validación usando atributos a través de DataAnnotation, la cual nos ofrece mecanismos para personalizarlas o extenderlas. En un post previo
ya he explicado como implementar las reglas de validación usando DataAnnotation, en esta ocasión les explicare como crear uno personalizado.

Manejo de Errores

Cuantos de ustedes tiemblan al escuchar al usuario decir: “hay un error…”, la verdad es que es casi imposible escribir un código completamente libre de errores. Después de todo, nuestra aplicación es concebida y se ejecuta de forma segura en nuestro equipo. El entorno en el cual se desarrolla, no es el mismo que el de la maquina final.

lunes, 21 de febrero de 2011

Enums

Tal vez ni siquiera hayas escuchado hablar de los Enums, o simplemente los has evitado, porque a los programadores nos preocupa poner valores en constantes, ya que un enum es una lista de constantes.
Por lo general se emplean cuando el dato en cuestión, podría estar almacenado en una tabla de la base de datos, pero le sirve al programador para tomar decisiones durante el flujo de la aplicación; ya que por su naturaleza, sería necesario que nosotros supiéramos de su tipo, etc.

domingo, 20 de febrero de 2011

User Experience

Desde la primera vez que libere una aplicación, en su versión de prueba, descubrí un área que por lo general se encuentra fuera del campo de visión de los programadores: LA EXPERIENCIA DE LOS HUMANOS CON LA APLICACIÓN.

sábado, 19 de febrero de 2011

Factory Pattern

Desde que incursione por primera vez al paradigma orientado a objetos, me llamo poderosamente la atención la conceptualización de los objetos reales, en definiciones denominadas Clases, que por medio del mecanismo de la instanciación se convierten en objetos.
Este mecanismo no se ve afectado por las diferentes clases, siempre se lleva a cabo por medio de un constructor. Los constructores pueden recibir atributos, para inicializar las propiedades de la nueva instancia, así como recientemente las modificaciones al Framework nos permiten inicializar dichas propiedades al momento de crear la instancia sin que sean enviados argumentos al constructor.

Work Flow

Cuando empezamos a realizar alguna actividad se nos imparte un curso de inducción, un curso donde se nos explican los aspectos operativos de la actividad que vamos a realizar, se nos explican los pasos, la secuencia de las tareas, la información que necesitamos y la que debemos generar, etc.

viernes, 18 de febrero de 2011

n-Capas

Cuando empecé a trabajar con MVC y supe que el nombre eran las iniciales para Model, View y Controller, creí que MVC tendría 3 capas. Y eso se debió a que mi experiencia previa desde mucho tiempo atrás, se basaba en modelos con n-Capas.

Buenas prácticas

No es posible hablar de Patrones de diseño sin que hablemos de las buenas prácticas. Las buenas prácticas no son patrones de diseño, en realidad cuando las conocemos nos damos cuenta que son la base de los patrones. También son dictadas desde la misma experiencia y conocimiento que se ha acumulado durante años. Seguirlas nos ayudan de la misma forma que usar estándares a la hora escribir código; si quieren llámenlas consejos, desde el punto de vista de la arquitectura de software son principios de diseño.

Patrones de diseño de software.

He hablado mucho sobre el tema, en los últimos post, incluso los he ejemplificado, y al igual que con otros temas dentro de este Blog, cometí el error de creer que todo el mundo debe haber escuchado de ellos, o al menos saber lo que son y lo que no son.
Así que ahora voy a tratar de exponer lo que para mí son los patrones de diseño de software.

LINQ

En post previos he hablado del LINQ, aun que fue muy superficial, porque cuando lo escribí, di por sentado que quien leyera el post, debía conocer LINQ. Sin embargo, algunos amigos que han leído mi Blog, me han comentado que no siempre es así.
Así que vamos por partes.

jueves, 17 de febrero de 2011

Dependency Injection

Este es uno de los patrones de diseño de software de mayor popularidad al momento.
Por qué?
Favorece la implementación de clases que no son cohesivas, privilegia el código reusable, y libera a nuestro software del paradigma de las dependencias que muchas veces le impiden evolucionar. Por medio de este, podemos crear piezas de código para usar en nuestro software, y cuya arquitectura une los componentes, en vez de que los componentes se liguen a sí mismos.

martes, 15 de febrero de 2011

View Engine

Cuando decidí empezar a desarrollar en MVC 1 de Microsoft, una de las razones, era la promesa de poder controler la generación del código HTML, conocidas como Views en el argot de MVC.
Encontré algunos ejemplos muy interesantes donde el programador sustituyo por completo llamado FlickrExplorer (http://flickrxplorer.codeplex.com/) una excelente pieza de código, aun que fue creada en MVC 1.0 puede ser abierta en VS 2010 sin ningún problema.

Extensibility en MVC

Cuando hablamos de MVC podemos decir sin temor a equivocarnos, que fue pensado para que el programador pudiera tomar el control, para que pudiéramos ampliar su funcionalidad y lograr nuestros objetivos. Para poder hacerlo, es necesario conocer los puntos donde se puede ampliar o personalizar, además es necesario conocer a fondo dicho punto para hacer las cosas adecuadamente…nadie dijo que fuera fácil!

MVC 3 (preview)

Hace unos días recibí con mucha curiosidad la nueva versión de MVC, la 3. Dicho sea de paso, he tenido la oportunidad de trabajar con el MVC de Microsoft, desde la versión 1; así como trabaje con ASP desde sus inicios.
Entre la versión 1 y 2 hubo avances significativos, en pro de simplificar el código que era necesario escribir en la versión 1. En la versión 2, resulto más estructurado y simple llevar a cabo alguna tarea, sin que sea necesario dar muchas vueltas. Los patrones y los principios de Diseño, se pueden detectar en todo lo que hacemos.

lunes, 14 de febrero de 2011

Métodos de Extensión

Estos métodos nos permiten agregar nuestros propios métodos a tipos ya existentes, sin tener que derivar o recompilar, o tener que modificar el código original.
Son un tipo especial de método que es llamado como si fuera parte de la clase instanciada del tipo para el cual fue creado el método de extensión. Los métodos extendidos más famosos los podemos encontrar en LINQ, y le añaden funcionalidad extra a IEnumerable y a IEnumerable<T>.
Estos métodos los podemos ver cuando estemos codificando en el Intellisense después del punto.

Generics

Es una de las más poderosas características que introdujo el .Net Framework 2.0. Representa la solución a uno de los problemas más recurrentes en la programación. Poder definir estructuras de datos con tipos de datos seguros, que no tiene que ser asignados al momento de codificar.
El principal beneficio es la posibilidad de reutilizar el código, incluso con diferentes tipos de datos, todo tipo que soporte el compilador puede usar el código, incluso tipos de datos que no existan en este momento.

Entendiendo las Lambdas

NO es posible entender las expresiones lambdas sin conocer los métodos anónimos. Un método anónimo, según la explicación más simple que pude encontrar es: un evento directamente asociado a un bloque de código. Así que son métodos que se definen en la misma línea.
Una expresión Lambda tiene la habilidad de manejar eventos en la misma línea de codigo, asignando un bloque de código directamente a un evento usando métodos anónimos. Las lambdas son una forma muy concisa de crear métodos anónimos.

domingo, 13 de febrero de 2011

Flujo de trabajo al codificar

Cuando tenemos mucho tiempo haciendo algo, es inevitable que hayamos creado una forma de hacerlo, por lo general nuestra propia forma de hacerlo. Si tuviste la oportunidad que te guiara alguien con experiencia, tú flujo de trabajo estará basado en la experiencia de alguien que ya haya caminado esa ruta y sepa por donde ir con más seguridad. Si no fue así y tuviste que conocer el camino por tu cuenta, es muy probable que te hayas caído en el camino, que hayas caminado en círculos, que te hayas extraviado, etc.

viernes, 11 de febrero de 2011

Buddy Class

Cuando nos encontramos con alguna innovación en la tecnología, siempre debemos analizar de qué forma afectara nuestra forma de hacer las cosas. Por ejemplo hace algunos pocos años, los celulares y las redes sociales no formaban parte de nuestras vidas. Hoy en día un adolecente, se preguntara como podíamos vivir sin estos.
Aun recuerdo cuando un generador de código era una herramienta mística, que cualquiera deseaba como parte de sus herramientas de trabajo. Hoy en día, el Visual Studio nos ofrece este tipo de herramientas, que sonde gran utilidad.

Patrón de Repositorio y Patrón de Unidad de trabajo.

Cuando se habla de escribir código, siempre se dice que hay muchas formas de hacerlo, y desde el más simplista punto de vista, eso es cierto. Sin embargo cuando se habla de escribir código de calidad, entonces las múltiples formas de hacerlo se reducen.
Con el paso de los años dentro de este medio, he visto muchas formas de hacer lo mismo, y siempre he tratado de usar la más recomendada o probada. Hace algún tiempo, escuche por primera vez la palabra PATRON al referirse a una forma probada de hacer las cosas.

Entity Framework 4.0

Para aquellos que son nuevos en el uso del EF, puedo decirles que en esta versión podrán encontrar funcionalidades que aparecen por primera vez y que vienen a solucionar algunas deficiencias de versiones anteriores.
Vamos a comentar algunas, sin que se entienda que son las más importantes:

jueves, 10 de febrero de 2011

Entidades

En lo personal soy programador desde antes que existieran las bases de datos como hoy las conocemos o las clases. Trabaje con mecanismos para almacenar y recuperar la información, desde archivos secuenciales, tablas y desde luego bases de datos.

miércoles, 2 de febrero de 2011

Entendiendo los Helpers

Un helper es simplemente un método que regresa una cadena de texto. La cula puede representar cualquier tipo de contenido que deseemos. ASP.NET MVC ya incluye un conjunto de Helpers muy útiles, como por ejemplo:
  • Html.ActionLink()
  • Html.BeginForm()
  • Html.CheckBox()
  • Html.DropDownList()
  • Html.EndForm()
  • Html.Hidden()
  • Html.ListBox()
  • Html.Password()
  • Html.RadioButton()
  • Html.TextArea()
  • Html.TextBox()

sábado, 22 de enero de 2011

Modelo de validación

Dentro de MVC podemos encontrar un modelo de validación lo suficientemente poderoso, para que sea lo suficientemente fácil de implementar. Por diseño se establece la validación en el servidor, aun que nos permite la implementación de un modelo de validación del lado del cliente.
Nos ofrece un mecanismo por medio del cual podemos usar las DataAnnotations, que son reglas de validación declarativas que se pueden aplicar a propiedades y objetos.
La arquitectura nos permite usar incluso nuestro propio motor de validaciones, o implementar otros de terceros.

martes, 18 de enero de 2011

View Models

Es un patrón que nos permite separar el modelo de la interface de usuario.
Desde mi muy particular punto de vista un ViewModel es una forma de organizar los datos que pertenecen a un modelo para que puedan ser presentados sin tener que exponer la entidad, incluso aun que dicha entidad no exista en la base de datos.

En nuestro Blog, un ViewModel es una clase especial que se crea para enviar los datos al view y que le permite al Controler realizar un automatic binding al momento de recibir la respuesta del usuario, a través del envió de la información.

Reglas de Validación y Reglas de negocio

Es importante que se pueda realizar la diferenciación entre ambas. Es muy fácil confundirlas y terminar realizando reglas de validación en vez de reglas de negocio.
Las reglas de validación son partes reusables de lógica, que llevan a cabo dicha validación sobre una entidad; misma que puede variar entre validación de integridad hasta validación de estado y cuya meta es realizar una validación sobre la entidad antes que alguna acción sea realizada con esta entidad.

domingo, 16 de enero de 2011

Validación de DATOS en el MODEL

El código que se genera para el MODEL no debe ser modificado, aun que es posible, no es recomendable, ya que cada vez que se genera debido a una modificación en el MODEL, las modificaciones se perderán.
No todo está perdido, hay una forma de extender las clases. En .NET podemos dividir una clase en diferentes archivos físicos usando la declaración PARTIAL . Las clases para las entidades dentro del MODEL creado por el ENTITY FRAMEWORK (EF) son parciales. Esto nos da la posibilidad de crear un archivo nuestro donde podemos crear propiedades que no existan a nivel de la tabla; y así tener propiedades de la clase que no requieren está en la base de datos.
Si estamos usando el EF es necesario crear Clases Meta Data, y aplicarle a esta clase las validaciones requeridas.

 

Como se crea un VIEW?

Cuando encontré por primera vez esta arquitectura, me llamo la atención la forma en que se creaban las vistas o “paginas”. Incluso alguien escribió en algún Blog que le parecía Magia. ;-)

 

Acceso a Datos

En MVC la capa de datos juega un papel muy importante. La filosofía de MVC le asigna la completa responsabilidad de accesos a Datos. El MODEL es el único lugar donde podemos encontrar los registros de la base de datos en su representación como clases.

sábado, 15 de enero de 2011

Controllers

Una vez que hemos creado el Model y tenemos los repositorios, ya estamos en posibilidad de crear un Controller.

 Que es un Controller?

El controler es el responsable del flujo de la aplicación. Es el que recibe la solicitud para realizar alguna acción y es el que genera la respuesta adecuada. El controller es un tipo de clase especial que hereda del System.Web.Mvc.Controller. Los métodos que expone esta clase se denominan acciones. Y las respuestas pueden ser Views, Archivos, o Re direccionar a otro controler, etc.

Expresiones Lambdas

Una expresión Lambda es una función anónima. Este tipo de funciones usan el operador “=>” que se lee “VA A”. Este operador tiene la misma prioridad que el operador “=” es asociativo hacia la derecha.
Las expresiones lambda se utilizan en consultas de LINQ basadas en métodos.

CRUD

Dentro de nuestra interface del repositorio hemos incluido los métodos que se necesitan para poder ofrecer las funciones básicas de acceso al Model. CRUD son las siglas en ingles de:
C.- Create o crear.
R.- Read o Leer (Consulta).
U.- Update o Actualizar.
D.- Delete o Borrar.

 

Contexto

Que necesito para acceder al Model?

Desde el punto de vista de MVC el model se encuantra en el contexto del usuario que este ejecutando la aplicación. Por lo que acceder a él debe ser bajo algún mecanismo que nos permita garantizar que dicho contexto sea el mismo sin importar desde que repositorio estemos realizando el acceso.
Esto se debe a necesidad de asegurarnos que las transacciones automáticas que nos ofrece el Entity framework mantengan su integridad.

LINQ

Que es LINQ

Sin las siglas de las palabras en ingles: Language Integrated Query o lenguaje integrado de consulta.
Es un proyecto de Microsoft que agrega consultas nativas semejantes a las de SQL a los lenguajes de la plataforma .NET, inicialmente a los lenguajes Visual Basic .NET y C#.
LINQ define operadores de consulta estándar que permiten a lenguajes habilitados con LINQ filtrar, enumerar y crear proyecciones de varios tipos de colecciones usando la misma sintaxis. Tales colecciones pueden incluir arreglos , clases enumerables, XML, conjuntos de datos desde bases de datos relacionales y orígenes de datos de terceros.

Repositorio

Genéricos

El uso de los genéricos es una de las más poderosas implementaciones del .NET, surgió en la versión 2 del Framework y nos permite parametrizar el tipo de que almacenan y manipulan, las clases, las estructuras, las interfaces, los delegados, y los métodos
Si a una interface le agregamos el uso de Genéricos, el código se convierte en algo más poderoso, ya que podemos definir interfaces que no requieren que se establezca el tipo de los objetos en tiempo de diseño o codificación. Con el uso de los Genéricos, incluso el tipo de la clase que puede ser usado en la interface en tiempo de ejecución. Lo único que debemos hacer es cambiar el nombre de nuestra entidad, por la letra T mayúscula.

Interfaces

Cuando hablamos de crear código de fácil mantenimiento, que pueda ser reutilizado y flexible, podemos emplear los lenguajes de .NET. Sin embargo por muy escalable que sea nuestro diseño, por mucho que nos esforcemos en hacerlo no cohesivo, solo podremos lograrlo al 100% si usamos Interfaces.
El concepto de clases abstractas e interfaces puede ser un poco confuso para los principiantes en la programación orientada a objetos ya que una clase abstracta sin ninguna implementación se ve cómo una interface, sin embargo existen muchas diferencias y similitudes entre ellas.

viernes, 14 de enero de 2011

Como agregar un modelo: Entity Fremework

En los ejemplos que presentare en este Blog usare Entity Framework, por lo que a continuación les mostrare los pasos para incluir un Model a nuestra solución.
Para que este tutorial se pueda realizar deben tener instalado el SQL, 2005 o 2008 y ejecutándose en el equipo. Además deben tener una base de datos para usarla de ejemplo.

Como crear el primer proyecto.

A diferencia de la versión 1, que salió como un instalador adicional para VS 2008 y que al principio solo funcionaba con la versión en Ingles del producto y que además era necesario instalar algunos otros parches para lograr que se integre adecuadamente, esta versión ya podemos encontrarla dentro de los tipos de proyecto pre establecido.

Por donde comenzar?

Cuando me veo en la necesidad de aprender una nueva tecnología, siempre empiezo por obtener un libro y el código de un ejemplo. La mejor forma de verificar lo que estamos leyendo y de validar el código que estemos escribiendo es por medio de la comparación.

Para aprender MVC en la primera versión encontré el sitio de Scott Guthrie llamado Nerd Dinner, en este sitio podemos ver la tecnología en ejecución. Además se puede conseguir el código fuente y podemos descargar el libro donde se explica lo necesario para poder entenderla y dar nuestros primeros pasos.

Hoy en día la versión 1.0 de MVC ya paso a la historia, sin embargo es un buen comienzo. El código de la versión 2 lo podemos obtener de esta dirección: http://nerddinner.codeplex.com/releases/view/45647

La aplicación podemos verla en esta dirección: http://nerddinner.com/

El libro podemos obtenerlo en esta dirección: http://www.wrox.com/WileyCDA/Section/id-321793.html

Es una aplicación muy interesante donde podemos aprender los secretos de la tecnología, podemos conocer los elementos, como se codifica, podemos seguirla paso a paso y de esa forma avanzar con la confianza suficiente para poder crear nuestro propio sitio.

Suerte.