Desarrollo de Aplicaciones con el ORM .netTiers Parte I: Introducción

En un post anterior hace algún tiempo hablamos sobre los ORMs más conocidos entre los cuales mencionamos a .netTiers que es una plantilla para CodeSmith. En esta ocasión iniciaremos una serie de artículos para mostrar como utilizar este excelente ORM.

Introducción a netTiers
.netTiers es una plantilla de código abierto para CodeSmith escrito en C#. La intención de esta plantilla es asistir a los desarrolladores eliminando el código repetitivo, que tenemos que escribir cada vez que desarrollamos una aplicación con conexión a datos. Al mismo tiempo nos provee de un framework completo para comenzar a trabajar en las partes más importantes de nuestra aplicación, como son la capa de presentación, la lógica empresarial, el flujo de trabajo de nuestra aplicación, etc.

Conjunto de características actuales de netTiers
A continuación presentamos un listado de las características generales de .netTiers:

  • Genera una solución completa con proyectos separados y un framework basado en capas para su aplicación. Puede comenzar a trabajar con la aplicación inmediatamente terminado el proceso de generación.
  • Crea un conjunto completo de procedimientos almacenados que están especializados en el dominio de su aplicación. Este código se puede ejecutar como SQL en línea o como procedimiento almacenado, lo cual es configurable.
  • Genera automáticamente objetos de entidad y las relaciones entre estos objetos del dominio, basado en las tablas y relaciones de la base de datos.
  • Avanzado motor de validación de reglas de entidad, el cual puede utilizar las reglas creadas en el proceso de generación o utilizar delegados para cualquier regla de validación personalizada.
  • Las clases generadas incluyen dos partes, una parcial y una concreta, por lo tanto puede personalizar la lógica de cualquier clase sin que este código se sobrescriba cuando se ejecuta el proceso de generación nuevamente.
  • Utiliza una lista genérica personalizada para las colecciones (TList) que soporta toda la interfaz del modelo de componentes de .NET y más, y soporta enlace, ordenación y filtrado (Bindable, Sortable and Filterable).
  • Crea un sitio web completo, ya pre-configurado y listo para comenzar a escribir código conectable a datos inmediatamente.
  • Crea un conjunto completo de controles web de administración, que pueden servir como una consola de administración web completamente funcional para base de datos.
  • Crea un conjunto completo de controles DataSource con tipo para toda la API de acceso a datos, con soporte en tiempo de diseño, estos controles son similares a los ObjectDataSource, pero con más características propias del dominio.
  • Crea una API de servicios web completa para el dominio, perfecto para clientes .Net WinForms o dispositivos móviles, y su configuración es bastante simple.
  • Crea un conjunto completo de pruebas de unidad para los proveedores de datos y provee aproximadamente un 50% de cobertura. Estas pruebas pueden ser para nUnit o Visual Studio Team System.
  • El código que se genera está completamente comentado y listo para sus necesidades de documentación, además de seguir las directivas de Microsoft para la nomenclatura.
  • Cualquier código que se encuentre en una carpeta especial en cualquiera de los proyectos, que por defecto se llama App_Code, será automáticamente incluido en el proyecto generado.
  • Las consultas que se incluyen en la API de accedo a datos, se pueden realizar por: Clave primaria, clave foránea, índices, relaciones de muchos a muchos, todos, selección paginada con filtro y búsqueda; así también métodos de escritura en la base de datos como Inserción/Actualización/Eliminación.
  • Puede crear sus propios procedimientos almacenados personalizados, para las entidades y .netTiers generará los métodos que sirven como envoltorio de ese procedimiento almacenado y todo lo que se necesite, esto permite tener su propia lógica dentro de la API de .netTiers.
  • y mucho más.

Arquitectura de .netTiers
La arquitectura de .netTiers está basada en las guías de Microsoft patterns & practices, específicamente de: Designing Data Tier Components and Passing Data Through Tiers

Arquitectura Microsoft

Este concepto de capa de datos está compuesto por componentes de entidad del negocio personalizadas (que representan a los datos propiamente dichos), y componentes de lógica de acceso a datos (la lógica de persistencia).

Bases de datos y SQL
¿Cómo sabe .netTiers que generar? .netTiers utiliza el proveedor de metadata de CodeSmith que analiza una base de datos con el fin de crear un completo dominio de objetos, basado en las relaciones de la base de datos. El explorador de esquemas provee información sobre bases de datos, tablas, vistas, índices, procedimientos almacenados y más.

Buenas prácticas para diseñar bases de datos
En un mundo perfecto sería muy conveniente utilizar las siguientes recomendaciones para que la generación de código con .netTiers y CodeSmith sea óptima:

  • Los nombres de las tablas deben de estar en singular y en notación Pascal (primera letra de cada palabra compuesta en mayúsculas), ejemplo: Orden, DetalleOrden, Producto, etc.
  • Las descripciones para tablas, columnas y claves deben estar establecidas como atributos extendidos, para Microsoft SQL Server se utiliza la clave “MS_Description” para atributos extendidos.
  • .netTiers no asume relaciones, es necesario que se creen las relaciones de clave foránea a clave primaria específicamente en la base de datos.

Procedimientos almacenados personalizados
Existen muchos casos en los que se necesita extender la API de acceso a datos, sin perder las características de generación de la capa de datos. .netTiers ofrece la capacidad de escribir sus propios procedimientos almacenados, proporcionando la posibilidad de incrementar la funcionalidad que no ha sido generada automáticamente o las características que son especializadas de una aplicación en particular, un ejemplo sencillo sería el caso de necesitar la creación de un procedimiento almacenado personalizado para obtener un listado de productos con stock por debajo de un determinado límite. Cuando se inicia el proceso de generación, el explorador de esquemas de CodeSmith intenta descubrir toda la metadata para determinar el conjunto de resultados de un procedimiento almacenado así como también los parámetros que requiere tanto de entrada como de salida con sus respectivos tipos de datos, en base a esta información puede crear los métodos de las clases necesarias para realizar el mapeo.

Existen algunos casos en los que los procedimientos almacenados no retornan los resultados esperados, los procedimientos almacenados personalizados no funcionan cuando se utilizan tablas temporales dentro del procedimiento, esto se produce porque cuando el explorador de esquemas de CodeSmith está analizando la información no tiene los privilegios suficientes para crear las tablas temporales; una solución alternativa es utilizar variables de tabla en lugar de las tablas temporales.

Un detalle importante a tener en cuenta es que si queremos retornar entidades del dominio desde los procedimientos almacenados personalizados, necesitamos devolver en la consulta todos los datos de la tabla y en el orden correcto para que coincida con una entidad del dominio, cuando los resultados de un procedimiento almacenado personalizado no coincide con algún objeto entidad del dominio, se mapea como un DataSet genérico o como un objeto DataReader, lo cual es configurable.

Hasta aquí la parte introductoria de esta serie de artículos, en la que vimos una descripción un tanto más detallada de las bases de .netTiers, toda esta información fue obtenida de la documentación oficial de .netTiers que puede ser consultada en la siguiente dirección: .netTiers Documentation Wiki

3 comments so far

  1. Ariel on

    Hola,
    Lei tu post y me parecio muy bueno, estuve probando nettiers y la verdad que funciona muy bien, pero no me queda claro cual seria la arquitectura o la forma correcta (si es que la conoces )en la que deberia plantear mi construir mi solucion una vez generada mi capa de acceso a datos con NetTiers y CodeSmith.
    Convendria poner los assemblys resultantes de lo que genere con codeSmith en la BIN de mi sitio y utlizarlos como si fueran una DAL o hacer un proyecto aprate en el cual refernciaria estas dll??
    Muchas gracias de antemano
    Ariel

  2. dennis on

    Hola soy nuevo en nettiers y codeSmith, pero les agradeceria de como comenzar a trabajar, es decir que debo de instalar, como debo empezar, es decir que amplien mas este tema con ejemplos… seria bueno para los novatos.

  3. OkDokey@okdoky.com on

    Contesta al nano del primer comentario, hombre…


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: