Permítanme primero disculparme por la duración de todo el tema. Será bastante largo, pero deseo estar seguro de que el mensaje llegue claramente sin errores.Servicio de datos WCF de OData con NHibernate y lógica de negocios corporativos
Aquí en la empresa, tenemos una aplicación web ASP.NET existente. Escrito en C# ASP.NET en .NET Framework 3.5 SP1. Hace algún tiempo, se desarrolló una API inicial para esta aplicación web utilizando WCF y SOAP para permitir que las partes externas se comuniquen con la aplicación sin depender de los navegadores.
Esta API sobrevivió durante un tiempo, pero finalmente la solicitud llegó para crear una API nueva que era RESTfull y confiaba en nuevas tecnologías. Me asignaron esta tarea y creé la API inicial utilizando el Microsoft MVC 2 Framework, que se ejecuta dentro de nuestra aplicación web ASP.NET. Inicialmente, esto tardó un tiempo en apagarse para que funcionara correctamente, pero por el momento podemos realizar llamadas REST en la aplicación para recibir XML detallando nuestros recursos.
He asistido a un Microsoft WebCamp, y el concepto OData me vendió inmediatamente. Fue muy similar a lo que estamos haciendo, pero este era un protocolo respaldado por más jugadores en lugar de nuestra propia implementación. Actualmente estoy trabajando en un PoC (Prueba de concepto) para recrear la API que desarrollé utilizando el protocolo OData y la tecnología WCF DataService.
Después de buscar en Internet para obtener NHibernate 2 para trabajar con los servicios de datos, tuve éxito en la creación de una versión de ReadOnly de la API que nos permite leer las entidades de la capa de negocios interna mapeando las solicitudes de consulta entrantes a nuestro Capa empresarial Sin embargo, deseamos tener una API funcional que también permita la creación de entidades utilizando el protocolo OData. Así que ahora estoy un poco atascado sobre cómo proceder. He estado leyendo el siguiente artículo: http://weblogs.asp.net/cibrax/default.aspx?PageIndex=3
El artículo anterior explica muy bien cómo mapear un DataService personalizado a la capa NHibernate. Lo he usado como base para continuar, pero tengo el "problema" de que no quiero asignar mis solicitudes directamente a la base de datos usando NHibernate, pero deseo asignarlas a nuestra capa Business (una DLL separada).) que realiza un gran lote de verificaciones, restricciones y actualizaciones basadas en derechos de acceso, privilegios y disparadores.
Entonces, lo que quiero preguntar es, por ejemplo, crear mi propia clase NhibernateContext como en el artículo anterior, pero en cambio confiar en nuestra Business Layer en lugar de las sesiones de NHibernate, ¿podría funcionar? Probablemente tendré que confiar mucho en la reflexión para averiguar el tipo de objeto con el que estoy trabajando en tiempo de ejecución y llamar a las clases de negocios correctas para realizar las actualizaciones y las eliminaciones.
Para demostrar con una imagen ASCII Smal:
*-----------------*
* Database *
*-----------------*
*------------------------*
* DAL(Data Access Layer) *
*------------------------*
*------------------------*
* BUL (Bussiness Layer) *
*------------------------*
*---------------* *-------------------*
* My OData stuff* * Internal API *
*---------------* *-------------------*
*------------------*
* Web Application *
*------------------*
Por lo tanto, sería este trabajo, o sería el rendimiento que sea inútil? ¿O solo me falta el balón aquí? La idea es que deseo reutilizar cualquier lógica almacenada en la capa DAL BUL & del servicio de datos WCF de OData.
Estaba pensando en la creación de nuevas clases que heredan de las clases del espacio de nombres EntityModel Data.Services y crear un nuevo objeto DataService que marca todas las llamadas a las capas API BUL & & DAL. Sin embargo, no estoy seguro de dónde/quién para interceptar las solicitudes de creación y eliminación de recursos.
Espero que esté un poco claro lo que estoy tratando de explicar, y espero que alguien me pueda ayudar en esto.
Corrección del enlace de arriba para el artículo muy útil (incluye fuente, etc.) http://weblogs.asp.net/cibrax/archive/2010/08/13/nhibernating-a-wcf-data-service.aspx – paulecoyote