Capa de Datos Automágicamente Generada con NetTiers y CodeSmith

Como es costumbre en nosotros los desarrolladores, siempre estamos en busca de nuevas formas de escribir menos código, ¿será para mostrar lo listos que somos?, o simplemente porque somos muy flojos.

Sea como sea, la primera librería que utilicé para agilizar la escritura de la capa de datos de mis aplicaciones fue el Data Access Application Blocks, que ahora forma parte de la Enterprise Library, es cierto que esta librería ayuda a la hora de crear la conexión con la base de datos y ejecutar los procedimientos almacenados, pero aún hay mucho código que escribir.

Entonces decidí buscar una nueva alternativa, algo más completo, mi búsqueda por la web me llevó a un nuevo concepto para mi, ORM (Object Relational Mapping), mapeo del modelo orientado a objetos en que programamos al modelo relacional de base de datos, este mapeo es necesario porque como sabemos existe una brecha entre estos dos modelos y hasta que no se desarrollen completamente las bases de datos orientadas a objetos, tendremos que estar saltando esta brecha cada vez que tengamos que persistir un objeto en una base de datos relacional (Sql Server, Oracle, MySql, etc.)

Para lidiar con el problema de estar escribiendo cada vez el código necesario para persistir nuestros objetos, surgen numerosas librerías que nos ayudan a automatizar esta tarea, a continuación enumero algunas:

eXpress Persistent Objects for .NET.- de Developer Express, es uno de los primeros ORM que revisé, es bastante simple de utilizar, a grandes rasgos lo que tenemos que hacer es crear nuestra clase, por ejemplo en C# con sus respectivos campos, luego para que esta clase se pueda persistir tenemos que hacer que herede de la clase XPObject, adicionalmente si queremos hacer asociaciones y cambiar los nombres con que se guardaran las tablas o campos en la base de datos tendremos que utilizar atributos, después de crear nuestras clases, si la base de datos aun no existe se creará automáticamente y podremos persistir nuestras clases en ella. Esta librería soporta la mayoría de las bases de datos conocidas, así que cambiar de gestor de base de datos no representa ningún problema, una desventaja es que esta librería es de pago.

NHibernate for .NET.- Es la versión para .Net del conocido Hibernate para Java, aunque no esta tan desarrollado como su hermano mayor de Java, es una buena alternativa; para persistir las clases no necesita que nuestra clase herede de una clase base como en el caso anterior, lo que necesitamos en este caso es un archivo en formato xml donde indicaremos el mapeo de los campos de la clase con la base de datos, soporta lenguaje de consultas orientado a objetos, además de la mayoría de bases de datos conocidas, y para cambiar de gestor de base de datos en nuestro proyecto solo basta cambiar una línea en un archivo de configuración, en la versión actual todavía no soporta procedimientos almacenados razón por la cual no lo utilizo en mis proyectos, en la siguiente versión ya traerá soporte para procedimientos almacenados. Esta librería es open source, así que pueden utilizarla sin costo alguno.

Cooperator Framework.- Es un framework relativamente nuevo, no he tenido oportunidad de probarlo pero promete bastante, esta hecho por un grupo de desarrolladores argentinos, así que no es mala idea echarle un vistazo.

.netTiers.- .netTiers en realidad es una plantilla para CodeSmith, y CodeSmith es un generador de código que funciona basado en plantillas, uno escribe una plantilla en un lenguaje que tiene sintaxis similar al ASP .Net y luego puede general código para cualquier lenguaje basado en el texto de la plantilla.

Entonces .netTiers es una enorme plantilla que funciona en CodeSmith, se conecta con la base de datos que le indiquemos y comienza a generar todos los procedimientos almacenados que necesitaremos es decir (Insert, Update, Delete y consultas) para cada una de las tablas de nuestra base de datos, luego genera todas las clases correspondientes a las tablas que tenemos en la base de datos, así como los métodos que se corresponden con los procedimientos almacenados, y lo coloca todo en diferentes proyectos que conformarán la capa de datos. Obviamente habrá alguna funcionalidad específica de nuestra aplicación que no se puede generar automáticamente , para lo cual tendremos que escribir el procedimiento almacenado nosotros mismos con una nomenclatura especial, para estos procedimientos también se generaran los respectivos métodos en las clases correspondientes.

De esta manera no tendremos que preocuparnos por hacer consultas Sql, únicamente tendremos que llamar a los métodos necesarios con los parámetros requeridos.

La ventaja de esto es que el código se genera una sola vez, por lo que se gana en velocidad de ejecución, puesto que todo es compilado antes de su distribución.

La desventaja es que por el momento solo funciona con Sql Server, además que la plantilla es de uso libre pero el generador CodeSmith es de pago.

Yo utilizo el .netTiers en mis proyectos porque lo considero una buena opción está en medio camino entre hacer todo a mano y utilizar un ORM que genera todo en tiempo de ejecución como el NHibernate.

14 comments so far

  1. margarito on

    Traten esto mejor
    es Open Source y provee mejor manejo para NHIbernate que cualquier template de Codesmith

    http://www.codeproject.com/useritems/NHibernate_Templates.asp

  2. eloyparedes on

    Gracias por tu aporte Margarito, sin duda será de mucha utilidad para todos.

  3. SMatanza on

    Hey,
    Actualmente ando revisando esta opción:
    http://www.subsonicproject.com

  4. Fabian on

    Hola muchachos, saquenme de duda, resulta que quiero iniciarme en el mundo O/RM y el que me llama la atención por el momento es el netTiers, de todas formas lo que quiero saber es si en cualquier software o/rm puedo realizar lo que se llama control de roles de usuario, por ejemplo si uno se loguea como Administrador que pueda entrar a determinadas páginas , y si uno se loguea como Contabilidad u otro tipo de Rol pues que le muestre las paginas asociadas a ese ROL.

    Por lo que estuve investigando, en ASP.NET 2.0 esto es posible usando los Membership, pero es una de codigo que de solo verlo ya te da dolor de cabeza, es por eso que quisiera que me den su punto de vista sobre este tema.

    Muchas gracias.

  5. eloyparedes on

    Hola Fabian,

    El control de acceso a páginas lo haces desde la interfaz de usuario, por ejemplo en un control TreeView enlazado a un mapa de sitio, en este aspecto poco interviene el ORM que utilices; para implementar la autenticación de usuarios la manera más fácil es utilizando el proveedor de Membership de ASP .NET 2.0, entiendo que al principio parezca intimidante pero en realidad es muy fácil utilizar, esta característica nos ahorra un montón de trabajo, es cuestión que estudies un pequeño ejemplo para que te quede claro como se utiliza.

    En otro aspecto si lo que quieres es tener un control de grano más fino para las operaciones que se pueden realizar en el sistema, como por ejemplo permisos para visualizar, modificar y eliminar registros puedes utilizar junto al proveedor de Membership y Roles, la administración basada en funciones con los que puedes crear grupos de usuarios como los que deseas Administrador, Contabilidad, etc. Y dar los permisos necesarios para cada operación. NetTiers ya implementa esta funcionalidad pero siempre utilizando Membership y Roles.

    Adicionalmente puedes implementar todo el control de autorización y autenticación manualmente, es decir programando tú todo lo necesario para implementar esta funcionalidad tarea arto trabajosa, en cualquiera de los casos los ORMs no presentarán inconvenientes.

  6. VictorChile on

    Hola :

    La nueva versión de NHibernate (1.2.0) ya soporta store procedures.

    Saludos.

  7. carlos on

    Hola:yo tambien estoy investigando el netTiers. Quisiera saber tu experiencia en aplicaciones medianas o grandes. Tengo que empezar a desarrollar una aplicaciones winForm donde algunos clientes se conectaran en forma directa a la base de datos y otros accederan por Web Service. Vi que el netTiers hasta genera el Web Service mas todas las otras capas, lo que hace que sea una alternativa muy tentadora, pero por supuesto lo que me interesa conocer es tu experiencia por el tema de performance y estabilidad. Gracias.

  8. eloyparedes on

    Hola Carlos, utilice el nettiers en un proyecto pequeño y como era de esperarse no tuve ningún problema, aunque aún no lo probé con algún proyecto grande, pero te comento que en aproximadamente una semana más, realizaremos algunas pruebas de rendimiento para decidir si lo utilizamos en un proyecto mediano, así que los mantendré informados sobre a decisión que tomemos.

  9. Albarian on

    Falta un elemento bastante importante que actualmente ya está disponible en Visual Studio 2008, que es LINQ to SQL junto a LINQ to Entities.

  10. Sergio on

    Hola, nettiers solo genera codigo en c#? conocen algo parecido pero que lo haga en visual basic?

  11. Noé on

    Hola!

    Que yo sepa, nettiers solo genera código C#. No se necesita que hagas nada más para poder usarlo con VB, solo compila las clases generadas con CodeSmith + NetTiers y en tu proyecto agrega referencias a las DLL’s que produjo tal compilación. Funcionan perfectamente.

    Saludos

  12. Ladislao on

    Desde el codesmith me conectó a oracle para consultar una vista, sin embargo al generar la plantilla se genera mal el script que crea los procedimientos respectivos, alguien podría por favor indicarme porqué?
    gracias

  13. Geova3006 on

    Que tal amigos…..

    Tengo ciertas dudas de como utilizar netTiers + CodSmith… Necesito realizar un proyecto… Si me pudieran dar unas directrices para utilizarlo… Para hacer mi capa de acceso a datos

  14. fbb780912 on

    Que tal amigos

    apenas estoy iniciando con nettiers y he creado mi primer proyecto pero como le asigno la cadena de conexion??

    gracias


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: