Oberflächlich betrachtet müssen Sie lediglich eine Operation identifizieren.
Zusätzlich sagen Sie, was eine Operation tun soll:
um den Vorgang zu starten [und], um sein Ende zu überwachen
Sie sagen es auf eine Art und Weise, als ob dies "nur die Art und Weise ist, wie die Identifikation verwendet wird", aber ich würde sagen, dass dies Eigenschaften sind, die eine Operation beschreiben. Das klingt für mich nach einer Typdefinition, es gibt sogar ein Muster namens "Befehlsmuster", das sehr gut passt. .
Es sagt
das befehlsmuster kapselt alle informationen, die zur durchführung einer aktion oder zur auslösung eines ereignisses zu einem späteren zeitpunkt benötigt werden .
Ich denke, das ist sehr ähnlich im Vergleich zu dem, was Sie mit Ihren Operationen machen wollen. (Vergleichen Sie die in beiden Anführungszeichen fett dargestellten Ausdrücke.) Anstatt einen String zurückzugeben, geben Sie einen Bezeichner für einen Operation
im abstrakten Sinne zurück, beispielsweise einen Zeiger auf ein Objekt dieser Klasse in oop.
In Bezug auf den Kommentar
Es wäre wtf-y, diese Klasse einen Befehl zu nennen und dann nicht die Logik darin zu haben.
Nein, würde es nicht. Denken Sie daran, dass Muster sehr abstrakt sind , in der Tat so abstrakt, dass sie etwas Meta sind. Das heißt, sie abstrahieren oft die Programmierung selbst und nicht ein Konzept der realen Welt. Das Befehlsmuster ist eine Abstraktion eines Funktionsaufrufs. (oder Methode) Als ob jemand die Pause-Taste unmittelbar nach dem Übergeben der Parameterwerte und unmittelbar vor der Ausführung gedrückt hätte, um später fortzufahren.
Im Folgenden wird oop in Betracht gezogen, aber die Motivation dahinter sollte für jedes Paradigma gelten. Ich möchte einige Gründe nennen, warum das Einfügen der Logik in den Befehl als eine schlechte Sache angesehen werden kann.
- Wenn Sie all diese Logik im Befehl hätten, wäre es aufgebläht und chaotisch. Sie würden denken "na ja, all diese Funktionen sollten in getrennten Klassen sein." Sie würden Refactoring die Logik aus dem Befehl.
- Wenn Sie all diese Logik im Befehl hätten, wäre es schwierig zu testen und sich beim Testen in die Quere zu kommen. "Heiliger Mist, warum muss ich diesen Befehlsquatsch verwenden? Ich möchte nur testen, ob diese Funktion 1 ausspuckt oder nicht, ich möchte es nicht später aufrufen, ich möchte es jetzt testen!"
- Wenn Sie all diese Logik im Befehl hätten, wäre es nicht allzu sinnvoll, eine Rückmeldung zu erstellen, wenn Sie fertig sind. Wenn Sie über eine Funktion nachdenken, die standardmäßig synchron ausgeführt werden soll, ist es nicht sinnvoll, benachrichtigt zu werden, wenn die Ausführung abgeschlossen ist. Vielleicht starten Sie einen anderen Thread, weil Ihr Vorgang tatsächlich darin besteht, einen Avatar im Kinoformat zu rendern (möglicherweise wird ein zusätzlicher Thread für Himbeer-Pi benötigt), vielleicht müssen Sie einige Daten von einem Server abrufen, ... was auch immer es ist, wenn es einen Grund dafür gibt Nach Abschluss der Berichterstellung kann dies daran liegen, dass eine gewisse Asynchronität (ist das ein Wort?) vorliegt. Ich denke, das Ausführen eines Threads oder das Kontaktieren eines Servers ist eine Logik, die nicht in Ihrem Befehl enthalten sein sollte. Dies ist eher ein Meta-Argument und möglicherweise umstritten. Wenn Sie der Meinung sind, dass dies keinen Sinn ergibt, teilen Sie es mir bitte in den Kommentaren mit.
Fazit: Mit dem Befehlsmuster können Sie Funktionen in ein Objekt einbinden, das später ausgeführt wird. Aus Gründen der Modularität (Funktionalität ist vorhanden, unabhängig davon, ob sie über einen Befehl ausgeführt wird oder nicht), Testbarkeit (Funktionalität sollte ohne Befehl getestet werden können) und all den anderen Modewörtern, die im Wesentlichen die Anforderung zum Schreiben von gutem Code ausdrücken, würden Sie die eigentliche Logik nicht verwenden in den Befehl.
Da Muster abstrakt sind, kann es schwierig sein, gute Metaphern für die reale Welt zu finden. Hier ist ein Versuch:
"Hey Oma, kannst du bitte um 12 auf den Aufnahmeknopf im Fernseher drücken, damit ich die Simpsons auf Kanal 1 nicht verpasse?"
Meine Oma weiß nicht, was technisch passiert, wenn sie diesen Aufnahmeknopf drückt. Die Logik ist anderswo (im Fernsehen). Und das ist auch gut so. Die Funktionalität ist gekapselt und Informationen sind vor dem Befehl verborgen. Es handelt sich um einen Benutzer der API, der nicht unbedingt Teil der Logik ist.