Pregunta

He estado tratando de envolver mi cabeza alrededor de cómo exponer mis objetos de dominio para el cliente. Si estoy usando un cliente rico o estoy usando la web, quiero usar el MVP y los patrones de depósito.

Lo que estoy tratando de envolver mi cabeza alrededor es como expongo mi repositorio y modelo, que estará en el servidor. ¿Es incluso posible exponer objetos de negocio complejas que tienen estado a través de un servicio web, o voy a tener que utilizar una tecnología patentada que no es el lenguaje / plataforma agnóstica, como remoto .NET, EJB, COM +, DCOM, etc.?

Algunas otras limitaciones son que no quiero tener que seguir cargando el objeto de dominio complejo a partir de la base de datos o transmitirla en todo el hilo cada vez que quiera hacer una operación. Algunos lógica compleja podría ser que ciertas áreas de la pantalla podrían ser deshabilitado o invisible en base a los permisos de usuario en combinación con el estado del objeto. También tendrán que ser mostrada al usuario la validación y la información de los mensajes de error. Quiero ser capaz de llamar lógicamente muchos de mis operaciones objeto de dominio, como si se estuviera ejecutando en la misma máquina.

Con la web, que tiene acceso completo. Usted no tiene que exponer los objetos a través de límites de servicio, por lo que puede hacer que una rica como le gustaría. Estoy tratando de crear una arquitectura N-teir que es rica y funciona cuando el cliente que llama el modelo está en un equipo diferente.

¿Fue útil?

Solución

Puede exponer sus objetos de dominio como cualquier otro objeto a través de los servicios REST o web. Creo que es clave para entender que tendrá que exponer a los servicios que proporcionan valor de negocio en una sola llamada, y éstos no necesariamente Mapa 1: 1 a los repositorios. Así, mientras que en el servidor puede esperar una sola llamada de servicio utilizar múltiples repositorios y realizar diversas agregaciones, las cosas que se exponen a través de cualquier tipo de servicio web debe ser resultados más o menos completos. Las operaciones que Exposé en el servicio no deben exponer a los repositorios individuales sino más bien centrarse en las operaciones significativas que proporcionan un valor comercial determinada.

Espero que esto ayude un poco.

Otros consejos

Puede utilizar un formater SOAP para .NET Remoting, pero el servicio resultante probablemente será duro consumir como un servicio, y rudo será muy hablador.

Si desea que su modelo de dominio para ser consumido como un servicio, debe ser diseñado como un servicio.

Como se indica en el diseño de dominio impulsada, un servicio no tiene estado, por lo que no se exponga directamente los objetos. Su servicio debe exponer los métodos que proporciona operaciones comerciales significativas que serán ejecutadas como una sola unidad.

Por lo general, consideran que el modelo en su cliente se encuentra en un contexto acotado diferente porque sus preocupaciones van a ser un poco diferente de la que en el servidor.

  

Lo que estoy tratando de envolver mi cabeza alrededor   es como expongo mi repositorio y   modelo, que estará en el servidor. Es   Es incluso posible para exponer complejo   objetos de negocio que tienen el estado a través de una   servicio web, o voy a tener que usar una   La tecnología patentada que no es   lenguaje / plataforma agnóstica, como .Net   interacción remota, EJB, COM +, DCOM, etc.?

Un buen modelo de dominio va a ser altamente conductual y diseñado en torno al dominio del problema (y sus discusiones con expertos en el dominio), yo por lo tanto argumentar en contra de diseñarlo de estar expuestos a los consumidores a distancia (de la misma manera que diseñarlo de la base de datos o GUI primera es una mala idea).

En su lugar me vería en el uso de un estilo como REST o mensajes y decidir sobre la interfaz que desea exponer y luego asignar a / desde el dominio. Así que si se fue con el descanso que le diseñe sus recursos y API (representaciones, de URL, etc.) y luego que había necesidad de cumplirlo desde el modelo de dominio.

Si esto se convierte en no natural, entonces siempre se puede tener varios modelos, por ejemplo, la asignación de un modelo específico de sólo lectura presentación separada de los mismos datos de código (o que envuelve el modelo de dominio del comportamiento complejo) es un enfoque que he varias veces usados.

  

Algunas otras limitaciones que son   no quiero tener que mantener la carga de la   objeto de dominio complejo a partir de la   base de datos o transmitirla en todo el   cablear cada vez que quiera hacer una   operación

Mire el almacenamiento en caché de HTTP y el apoyo a múltiples representaciones de un recurso, también mira el almacenamiento en caché dentro de su solución de acceso a datos.

  

mensaje de validación y error   información también tendrá que ser   se muestra al usuario. quiero ser   capaz de llamar lógicamente mucho de mi   las operaciones objeto de dominio como si fuera   que se ejecutan en la misma máquina.

Puede representarse a esto como un recurso o, más probablemente vistazo a los códigos de estado HTTP y los organismos de respuesta que te gustaría utilizar en esas situaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top