sábado, 1 de marzo de 2008

LinQ to Sql - Data label


LinQ to Sql (Arquitectura de capas):



Este artículo constará de tres partes:
  • Definición de Modelo de Datos Físico y Capa de Datos
  • Definición de Capa de negocios.
  • Definición de una interfaz de usuario, en este caso windows, pero puede ser web, recordemos que usamos capas (Portable y Reutilizable).
Como lo prometido es deuda he aquí un artículo de programación a tres capas con LinQ to sql y programado a objetos, pero antes debemos hablar un poco de que es la programación OO y que es LinQ.

LinQ (Language-Integrated Query o Lenguaje Integrado de Consulta), es el nuevo compilador que en un inicio era de C#, incluído en su versión Beta, en el Framework 3.0 y correspondía a la versión 3.0 de C#. En la actualidad LINQ no solo esta definido para C# sino que también para Visual Basic, en su versión incluída en el Framework 3.5, lo cual nos permite potenciar nuestros desarrollos en VB y C#.

Existen varias utilidades definidas para linq, como: LinQ to Sql, LinQ to DataSet, LinQ to Entities, LinQ to Xml y LinQ to Object.
Yo me centraré en este artículo en LinQ to Sql y, construiremos una capa de datos con esta nueva utilidad que nos ofrece el framework 3.5


En una segunda explicación, debemos saber que la programación orientada a objetos es resultado de un análisis y diseño de solución, debemos separar muy bien el concepto de objeto ya que se tiende a confundir los objetos que ofrece la herramienta de desarrollo con los objetos que se obtienen de un análisis y diseño.

Cuando hablamos de un botón estamos hablando de un control asociado a una clase que hereda de una clase superior que se encuentra definida en un Framework X, estas clases nos apoyarán en la programación de las interfaces, por decir algo, no debemos perder tiempo en estas clases ya que estan definidas (Un viejo jefe tuvo una discución de 2 horas conmigo sobre el objeto botón jejejeje "El que sabe sabe y el que no es jefe").

En cambio cuando hablamos de un objeto como el de persona, este nos dará como resultado una clase que tendrá asociada propiedades y métodos.

Los métodos estarán definidos y distribuídos en las capas o incluso, los métodos serán de tres capas, por eso es que a veces vemos en diferentes capas, métodos con el mismo nombre dentro de objetos de distintas capas (Con el mismo nombre, esto no es un error, Si!!! una programación OO define que en cada capa este el mismo nombre de Clase). Si bien es cierto, que las clases de apoyo son importantes, no representan gran importancia dentro de una programación orientada a objetos, ya que los objetos que realmente son importantes son los que se definen en el análisis y diseño y nos generarán la Base de datos, con sus entidades, y las clases y métodos que se distribuirán en cada una de las capas, es decir, si tenemos una clase persona y tenemos tres capas: Base de datos, capa de datos, capa de negocios, en la base de datos tendremos las entidades que se generarán resultado del modelo conceptual(Que dará como origen el modelo de datos y el modelo de clases) y, luego tenemos las clases de cada capa, es decir, si definimos una clase en el diseño, esta clase debe estar reflejada en la capa de datos y en la capa de negocios con el mismo nombre y con diferencias de métodos, esto quedará más claro cuando definamos nuestras capas.

Bueno chicos, este artículo no está orientado a enseñarles a programar OO, existen varios libros para eso, lo malo es que muy pocas personas entienden los conceptos de realizar análisis y diseño orientados a los objetos, por lo cual si la programación OO a objeto no está clara, es porque el Analista no sabe definir bien los objetos y modelo de clases. Es facil hablar de Análisis y Diseño OO, pero es realmente dificil definir un buen documento de este tipo, aunque existan muchas herramientas de apoyo (Recuerden Herramientas de apoyo, la lógica esta siempre del lado del Coeficiente intelectual).

Bueno ahora a lo suyo, modelemos una capa de datos con LINQ.

2 - Definición de Capa de datos

Debemos saber que LINQ to SQL permite acceder de dos formas a Bases de Datos, una es interactuando con las entidades directamente y otra es realizando llamadas a procedimientos almacenados definidos en una Base de Datos.


NOTA: En la actualidad LINQ solo funciona para SQL (Su mismo nombre lo dice LINQ to SQL), vamos a ver si los amigos de Microsoft sacan otros tipos de LINQ para Bases de Datos.


En esta parte definiremos los script de creación de tablas que utilizaremos para crear nuestras Bases de Datos, esto debe ser en SQL Server, preferentemente en 2005.


Bueno, la Base de Datos la llamaremos LINQ y los script de creación de tabla los entrego a continuación:

CREATE TABLE [lnqEmpleado](
[empCodigo] [int] IDENTITY(1,1) NOT NULL,
[empNombre] [varchar](70) NOT NULL,
[empApellidoPrimero] [varchar](70) NOT NULL,
[empApellidoSegundo] [varchar](70) NOT NULL,
[empFechaActivacion] [datetime] NOT NULL,
[empEstado] [char](1) NOT NULL,
CONSTRAINT [PK_lnqEmpleado] PRIMARY KEY CLUSTERED
(
[empCodigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)

CREATE TABLE [lnqUsuario](
[usuCodigo] [int] IDENTITY(1,1) NOT NULL,
[empCodigo] [int] NOT NULL,
[usuLogin] [char](10) NOT NULL,
[usuClave] [char](10) NOT NULL,
[usuEstado] [char](1) NOT NULL,
CONSTRAINT [PK_lnqUsuario] PRIMARY KEY CLUSTERED
(
[usuCodigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
ALTER TABLE [lnqUsuario]
WITH CHECK ADD CONSTRAINT [FK_lnqUsuario_lnqEmpleado]
FOREIGN KEY([empCodigo]) REFERENCES [lnqEmpleado] ([empCodigo])

ALTER TABLE [lnqUsuario] CHECK CONSTRAINT [FK_lnqUsuario_lnqEmpleado]



No hay comentarios: