2011-02-16 1 views
7

J'utilise le modèle de commande pour passer une commande d'un client à un serveur via un socket TCP/IP. Le serveur prendra l'objet de commande, le désérialisera puis appellera execute() sur l'objet de commande. Cependant, j'ai besoin de renvoyer une valeur à l'appelant sur le socket. Est-ce que le modèle de commande le permet? Sinon, y a-t-il un travail? J'ai regardé l'exemple du commutateur de lumière sur wikipedia, ce qui est génial, mais il n'y a pas de valeurs de retour. Tout conseil grandement apprécié.Motif de commande - Renvoie une valeur

+0

Pouvez-vous expliquer pourquoi vous devez renvoyer une valeur à l'appelant? Peut-être que plus de contexte aidera. – Ocelot20

+1

Je suis un grand croyant dans les modèles. Cependant, ils ne devraient être utilisés que pour ce qu'ils ont été conçus pour. Ma perception de la valeur du modèle de commandement ne semble pas correspondre à ce que vous avez décrit, jusqu'à présent. Pourriez-vous développer ce que vous pensez que le modèle de commande achète pour vous dans votre implémentation et pourquoi vous l'utilisez? – rfeak

+1

http://stackoverflow.com/questions/1154935/command-pattern-returning-status est une question similaire – nos

Répondre

4

Vous ne devriez pas avoir une méthode "execute()" sur le Command envoyé au serveur distant, c'est mauvais de plusieurs façons, surtout en Java. Le Command doit représenter l'action que le destinataire doit effectuer. Ce qui dans ce cas est d'appeler une méthode sur un objet.

Le motif Command représente les actions entreprises ou à entreprendre, et non l'implémentation de ces actions. Pensez plus à un ensemble d'instructions à effectuer.

Ce que vous décrivez est essentiellement un mécanisme d'appel RPC sur-ingénieur. Ne réinventez pas cette roue. Regarde les mécanismes RPC existants, il y a beaucoup à choisir dans le monde Java. Ensuite, vous devez décider si le RPC est synchrone ou asynchrone.

Une API basée sur REST est ce qui est populaire et durera plus longtemps en tant qu'API que n'importe quel mécanisme spécifique au langage natif tel que RMI.

+0

Bon point. Pensez-vous que RMI serait un bon ajustement pour ce scénario par opposition aux sockets dans le contexte de mon problème? RMI me donnera des talons qui peuvent être invoqués directement par le client non? Cela semble être une approche beaucoup plus agréable. Merci encore pour les pointeurs. – Joeblackdev

+0

Je viens de découvrir que RMI est un non-go avec Android. D'autres suggestions? Merci encore – Joeblackdev

+1

Une simple API basée sur REST est ce qui est en vogue aujourd'hui. Et je ne parle pas de RPC sur HTTP, je veux dire de réel REST. -> http://www.vertigrated.com/blog/2009/10/this-isnt-rest-this-is-rpc/ –

Questions connexes