Mein Befehl und Handler ist in zwei verschiedenen Schichten. Ich möchte zu meinem Kommando wie ein POCO sein und nichts über seinen Hundeführer wissen. Die Lösung, die in meinem Kopf kam so etwas wie diese:Decouple Befehl von seinem Handler
public interface ICommand
{
string GetHandler();
}
public interface ICommandHandler
{
void HandleCommand(ICommand command);
}
public class XCommand : ICommand
{
//...
public string GetHandler()
{
return "xh";
}
}
[Handler("xh")]
public class XCommandHandler : ICommandHandler
{
public void HandleCommand(ICommand command)
{
//handle
}
}
Ist das ein Befehl Muster?
Dies sieht wie Command/Query Response Separation (CQRS) –
Das Verb 'handle' ist ein wenig mehrdeutig. Ihre Frage wäre klarer, wenn Sie ein konkretes Beispiel für die tatsächliche Handhabung eines Befehls geben würden. Das Problem ist, dass im Muster ['Command'] (http://stackoverflow.com/a/35295617/1168342) eine 'execute()' Methode existiert, die den Befehl ausführt. Wenn Sie das mit handle meinen, dann ist es, wie @ jaco0646 sagte, in den Befehl selbst eingekapselt. Auf der anderen Seite (kein Wortspiel beabsichtigt), ist der "Aufrufer" vollständig von Befehlen im klassischen Muster entkoppelt. Der Aufrufer "handhabt" die Befehle, ruft aber nur 'execute()' auf ihnen auf. – Fuhrmanator
Wie Sie gesagt haben, könnte die Verwendung von "command" und "handle" verwirrend sein. Ich habe FindRequest und Finder und möchte diese Objekte entkoppeln. Also erstelle ich einen FindExecuter, den Client Pass FindRequest auszuführen. Ich habe ein Bild in den obigen Beitrag, um das Problem zu klären. –