2008-08-30 17 views
6

Estoy buscando impulsar mi modelo de dominio en una API de servicio WCF y quería tener algunas ideas sobre técnicas de carga diferida con este tipo de configuración.¿Carga lenta con un modelo de dominio de servicio WCF?

¿Alguna sugerencia al tomar este enfoque?


cuando he implementado esta técnica y paso en mi aplicación, justo antes de que el servidor devuelve mi lista de que toque el conseguir de cada propiedad que se supone que es cargado ligeramente ... cargando Por lo tanto ansiosos. ¿Podría explicar este problema o sugerir una resolución?

Edit: appears se puede utilizar el atributo XmlIgnore por lo que no consigue observó durante la serialización .. sigue leyendo sobre esto, sin embargo

Respuesta

3

En cuanto a cualquier arquitectura de interacción remota, tendrá que evitar una carga gráfico completo del objeto "por el cable" de forma descontrolada (a menos que tenga una cantidad trivialmente pequeña de objetos).

El Wikipedia article tiene las técnicas estándar prácticamente resumidas (¡y también en C#!). He usado tanto fantasmas como titulares de valores y funcionan bastante bien.

Para implementar este tipo de técnica, asegúrese de separar las preocupaciones estrictamente. En el servidor, las clases de implementación del contrato de servicio deberían ser las únicas partes del código que funcionan con contratos de datos. En el cliente, la capa de acceso al servicio debe ser el único código que funcione con los proxies.

La creación de capas de esta manera le permite ajustar la forma en que se implementa el servicio de forma relativamente independiente de las capas de interfaz de usuario que llaman al servicio y al nivel empresarial al que se llama. ¡También te da la mitad de posibilidades de probar la unidad!

4

No haga lazy cargando a través de una interfaz de servicio. Defina los DTO explícitos y consuma esos como sus contratos de datos en WCF.

Puede usar NHibernate (u otros ORM) para buscar adecuadamente los objetos que necesita para construir los DTO.

+0

Estoy atrapado en el mundo de ado.net solamente ... ¿hay alguna posibilidad de que pueda proporcionar una muestra de este enfoque que usted mencionó? –

+1

Básicamente, necesita crear un ProxyCollection, que herede de IList o ICollection, y esto debe ser capaz de realizar un seguimiento del comando para cargar los elementos. Al acceder a cualquiera de los miembros, primero ejecute el comando para completar la lista. –

1

Puede intentar usar algo basado en REST (por ejemplo, ADO.NET Data Services) y envolverlo de forma transpariente en su código de cliente.

Cuestiones relacionadas