18 enero, 2010

Integration Services - SSIS

Comparto mi iniciación en el mundo de SSIS, en motivo de migrar una base de datos antigua a una nueva bajo una estructura diferente y con ampliaciones añadidas.

Hes estado echando un ojo por internet y he comprobado como es sencillo crear un proyecto de Integration SErvices y empezar a toquetear.

Una vez hayamos instalado nuestro SQL Server, los componentes de cliente nos convertirán nuestro visual estudio en una plataforma apta para el desarrollo de proyectos de Analisys Services, Integration Services, BI,... por lo que ya podremos empezar a toquetear.

A partir de ahí os recomiendo ésta guia muy básica que nos da una noción rápida del producto: http://mciacci.blogspot.com/2008/03/ssis-ejemplo-de-package-con-origen-de.html

Enlace interesante: SQL_Server_Integration_Services - Wikipedia

15 enero, 2010

Force to implement a function with a default behaviour

Hoy, mientras refactorizava una parte de un código, he llegado a un punto en el que necesitaba crear una función en una clase, la cual tenia que ser de implementación obligada, pero sólo una parte de su código.
Añadido, necesitaba que se hiciera ésta implementación tipificada, dado que ese desarrollo tenían que implementar-lo muchas clases distintas.

Resumiendo:
- Necesitaba una clase base
- Un código que se forzada su implemnetación en sus hijos
- Permitir añadir código a la clase base, de manera que no tuviera que modificar las hijas.

¿Cómo? (cuando descubro ésta parte es cuando entiendo porqué la arquitectura de software puede encajar mágicamente tantas piezas y comportamientos)

abstract class BotellaFundamentals
{
public virtual void AbrirBotella()
{
// Espacio para un futuro
// Si ésta clase fuera real, probablemente sería mucho más genérica,
//por lo que previamente se realizaría un acceso a un controlador: ControlladorInstrumentos de Ibotella...

AbrirTapón();

// Espacio para cambiar en un futuro si se precisa
}

abstract protected void AbrirTapon();
}

class Botella : BotellaFundamentals
{
protected override void AbrirTapon()
{
// Implementación de abrir el tapon de la botella, o sea, ABRIR LA BOTELLA
}
}

Ventajas:
- Todo el mundo puede pedir que se abra la botella.
- Nadie sabe que se consigue abriendo el tapón, simplemente
- Si un dia inventan botellas con 5 tapones, el público no se va enterar, ya que todo el mundo llama a AbrirBotella();
Los cambios que supondrá será que sus clases hijas OBLIGATORIAMENTE deberán implementar la apertura de los otros 4 tapones.

Creo que es un apunte muy simple y aporta muchísimo a una solución.

14 enero, 2010

Entity Framework Design Model First - Framework 4.0

Hace unos días comentaba las carencias con las que me había encontrado trabajando con EF. Siguiendo con la idea de que EF es una plataforma que está naciendo, a pesar de tener por detrás una idea realmente interesante, quiero añadir un par de conceptos que mejoran, en su nueva versión sobre Visual Studio 2010, la potencia del producto.

El método de crear un modelo conceptual EDMX, en Visual Studio 2008 SP1, era crear la BBDD en SQL Server y luego generar el modelo a partir de ella.
Luego, una vez generado el modelo, hay que retocar las herencias y relaciones N-N para que EF entienda al 100% nuestro modelo.
Ello conlleva que un cambio en Base de datos nos obliga a rehacer el modelo y con ello rehacer la configuración de todas las herencias y las relaciones N - N.

En VS2010 y Framework 4.0, EF evoluciona y nos permite crear el modelo conceptual y partiendo de él, generar la base de datos. Es el proceso inverso, y lógico, de como lo hacía VS2008 SP1.


"Create Database From Model..."


Puede parecer un simple cambio de método, pero éste cambio nos EVITA rehacer relaciones y herencias cada vez que haya un cambio.

Es una evolución notable en el framework.

Referencias:
http://blogs.msdn.com/adonet/archive/2009/05/12/sneak-preview-model-first-in-the-entity-framework-4-0.aspx

03 enero, 2010

Entity Framework

El último proyecto en el que estamos trabajando consiste, a grandes rasgos, en el desarrollo de un aplicativo a medida con presentación web, tecnologia ASP.NET 3.5, bajo una arquitectura 3 capas y una vertical en forma de fachada en la que definimos toda la sintaxis de los esquemas que se utilizaran en el sistema.

¿Qué es?

La capa de acceso a datos se realiza a través de Entity Framework. Es una plataforma pensada para abstraer el esquema de base de datos y redefinirlo para ser visualizado desde nuestra capa de negocio como un modelo conceptual de "diseño".

La idea es realmente buena, aunque no está suficientemente depurada. Hay funcionalidades como que una columna sea FK y PK a la vez, que no se nos permitirá realizar.

Permite explicitar la herencia, las referecias de * a * o las 1 a * sin ningún problema.

Es muy interesante para modelos "simples" que cada una de sus tables se identifiquen por un PKID, no por claves compuestas y referenciadas a la vez.

Otro punto a mejorar es la actualización de cambios en la base de datos. El refresco es automático, pero te deshace cualquier asociación que hayas modificado en el modelo, tras la importación.

Ello dificulta mucho la actualización de estructura de BBDD al modelo EDMX (Entity Framework).

Cabe decir que el modelo EDMX no es más que un XML, que mapea y genera relaciones entre las entidades.

¿Qué ventajas ofrece?

A parte de las mencionadas anteriormente, la má simportante es que nos ofrece un canal vía LINQ para el acceso a los objetos y sus relaciones, como si de la navegación dentro de un OO se tratara. Simplemente con:

context.AddToClient(account);

context.SaveChanges();

puedo grabar una entidad cliente. A fin y al cabo, no deja de ser LINQ que va por detrás. Lo más interesante es que del "client" que acabo de guardar antes, puedo, por ejemplo:

List contactsClient = account.Contacts.TransformToIContact();

convertir las referencias del cliente, a Entidades de mi modelo de objetos.

Es una herramienta interesante para abstraer una relación N - N, dado que si trabajaramos directamente sobre la base de datos, deberíamos mantener nosotros la tabla intermedia que proporciona la carinalidad N - N.

Con Entity Framework, de eso nos libramos.

Modelo EDMX en VS 2008: