Pregunta

No estoy seguro de dónde colocar mi lógica comercial. Tengo un servicio WCF que expone sus métodos a mi cliente.

¿Debería ir la lógica de negocios en el método de servicio?

public User GetUser(int id)
{  
     //Retrieve the user from a repository and perform business logic
     return user;
}

o debería estar en una clase separada donde cada método de servicio WCF llamará a su vez los métodos de la capa comercial.

public User GetUser(int id)
{  
     return _userLogic.GetUser(id);
}
¿Fue útil?

Solución

Mi preferencia personal es tener WCF como una capa muy delgada sobre una capa comercial separada. La capa de WCF no hace nada más que hacer llamadas a la capa de negocios, similar a lo que ha mostrado en la Opción 2. Esto le brinda cierta flexibilidad en caso de que desee que su capa comercial consuma por algo más que clientes WCF (por ejemplo , una aplicación WPF que llama a su capa comercial directamente en lugar de a través de WCF).

Otros consejos

Los servicios de WCF ya están, por defecto, diseñados para la reutilización. No veo ninguna razón para no tener alguna lógica en sus servicios, aunque tenga en cuenta cosas como el principio de responsabilidad única para que no termine con un servicio que haga una docena de cosas.

Incluso entonces, si termina repartiendo su funcionalidad en clases más pequeñas, no es una mala idea alojar esas clases como servicios de WCF. Luego puede usarlos en proc (a través de tuberías) cuando sea necesario o a través de los límites de la máquina (TCP) o incluso como servicios web. Cree fachadas según sea necesario para proporcionar acceso a la funcionalidad de sus otros servicios más pequeños.

No hay una necesidad real de evitar poner ninguna lógica en las clases de servicio de WCF.

Creo que la decisión depende de sus necesidades comerciales. WCF es un mecanismo para transportar datos (objetos) entre el servidor y el cliente. Si le gusta que su Logic de Businsess se ejecute en el servidor, debe dejar que WCF exponga el objeto después de ejecutar su lógica comercial.

Debería ir en un conjunto separado de clases. Su capa WCF solo debe contener lógica que se refiera directamente a cómo se entrega el producto del servicio.

En su caso, veo que tiene un método WCF que devuelve a un usuario (supongo que esta es una clase personalizada) ¿Por qué tiene un método separado para devolver el IDED en lugar de poblar esa propiedad como parte de devolver el objeto de usuario?

Para la reutilización/prueba/mantenimiento/legibilidad, siempre debe colocarlo en una capa separada.

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