Bonjour,
Je suis actuellement en train de créer un petit client/serveur et pour cela j'utilise le pattern Commande. Du côté du serveur, à chaque message reçu par le client une commande est créée et exécutée. J'ai cependant un doute sur la façon dont elle est créée.
Donc, dans chacune de mes commandes, je fais appel à des méthodes appartenant à la couche "domaine". Un exemple:
Elle est crée par une fabrique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public class GameAttachObserverCommand implements ICommand { private ClientID clientID; private IObserver observer; public GameAttachObserverCommand(ClientID clientID, IObserver observer) { this.clientID = clientID; this.observer = observer; } public void execute() { IGame game = GameCenter.getInstance().getGame(); game.attachObserver(observer); } }
Et qui est elle-même appelée dans un MessageHandler qui s'occupe de récupérer la commande créée par la fabrique à partir du message que le handler lui passe et de l'exécuter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public class CommandFactory implements ICommandFactory { private static CommandFactory instance; private CommandFactory() {} public static CommandFactory getInstance() { if (instance == null) { instance = new CommandFactory(); } return instance; } public ICommand getCommand(Connection connection, Message message) { HostedConnection hostedConnection = (HostedConnection) connection; ClientID clientID = hostedConnection.getClientID(); switch (message.getType()) { case GAME_ATTACH_OBSERVER: ObserverID observerID = (ObserverID) message.getData("observerID"); return new GameAttachObserverCommand(clientID, new ObserverProxy(clientID, observerID)); default: return null; } } }
La question que je me pose est la suivante: est-ce que la manière dont j'instancie ma commande dans la fabrique est correcte ? Donc est-ce que je fais bien de construire ma commande avec l'ID du client et un Observer plutôt que de lui passer le message et la connexion ? Dans ce dernier cas, ce serait à elle de récupérer ce dont elle a besoin dans le message.
La première solution me semble la meilleure vu qu'on découple un peu plus la création d'une commande et la récupération des données contenues dans le message, mais je voudrais tout de même avoir votre avis.
Merci
Partager