2011-02-16 17 views
7

Estoy usando el patrón de comando para pasar un comando de un cliente a un servidor a través de un socket TCP/IP. El servidor tomará el objeto de comando, lo deserializará y luego ejecutará execute() en el objeto de comando. Sin embargo, necesito pasarle un valor a la persona que llama sobre el socket. ¿El patrón de comando permite esto? Si no, ¿hay una solución alternativa? He visto el ejemplo del interruptor de luz en wikipedia, que es genial, pero no hay valores de retorno. Cualquier consejo muy apreciado.Patrón de comando - devuelve un valor

+0

¿Puede explicar por qué necesita enviar un valor a la persona que llama? Quizás algún contexto más ayudará. – Ocelot20

+1

Soy un gran creyente en los patrones. Sin embargo, solo deben usarse para aquello para lo que fueron diseñados. Mi percepción del valor del patrón de comando no parece coincidir con lo que has descrito hasta ahora. ¿Podría ampliar lo que cree que el patrón de comando compra para usted en su implementación y por qué lo está utilizando? – rfeak

+1

http://stackoverflow.com/questions/1154935/command-pattern-returning-status es una pregunta similar – nos

Respuesta

4

No debe tener un método "execute()" en el Command enviado al servidor remoto, esto es malo de muchas maneras, especialmente en Java. El Command debe representar la acción que debe tomar el destinatario. Que en este caso es llamar a un método en algún objeto.

El patrón Command es para representar las acciones tomadas o que deben tomarse, no la implementación de esas acciones. Piensa más en un conjunto de instrucciones para llevar a cabo.

Lo que estás describiendo es básicamente un mecanismo de llamada RPC sobreingeniería. No reinventar esta rueda. Mira los mecanismos de RPC existentes, hay mucho para elegir en el mundo de Java. Luego debe decidir si el RPC es síncrono o asíncrono.

Una API basada en REST es lo que es popular y durará más como API que cualquier mecanismo específico del lenguaje nativo como RMI.

+0

Buen punto. ¿Cree que RMI sería una buena opción para este escenario en lugar de sockets en el contexto de mi problema? RMI me dará resguardos que pueden ser invocados directamente por el cliente ¿no? Esto parece un enfoque mucho más agradable. Gracias de nuevo por los indicadores. – Joeblackdev

+0

Acabo de descubrir que RMI es un no-go con Android. ¿Cualquier otra sugerencia? Gracias de nuevo – Joeblackdev

+1

Una API basada en REST simple es lo que está de moda en estos días. Y no me refiero a RPC sobre HTTP, me refiero a REST real. -> http://www.vertigrated.com/blog/2009/10/this-isnt-rest-this-is-rpc/ –

Cuestiones relacionadas