2014-11-04 36 views
6

Während ich "The Definitive Guide to Grails" gelesen habe, bin ich etwas verwirrt, Command Objects. Sie scheinen ein Wrapper um Domänenklassen zu sein, um bei der Validierung zu helfen, aber das ist Funktionalität, die bereits in Domänenklassen über eingebaute Einschränkungen und weiter über benutzerdefinierte Validatoren verfügbar ist. Was macht ein Befehlsobjekt wirklich und was motiviert uns, es zu brauchen?Grails Command Objekte - Was ist die Motivation dahinter?

Das Buch beginnt die Diskussion über die Befehlsobjekte mit der Feststellung, dass

„Manchmal ist eine bestimmte Aktion nicht die Beteiligung einer Klasse Domäne erfordert, sondern bedarf noch die Validierung von Benutzereingaben.“

Es zeigt jedoch die Deklaration und die Verwendung eines Befehlsobjekts in Bezug auf eine Domänenklasse Album. Es scheint also, dass alles, was ein Befehlsobjekt tut, immer noch eng mit Domänenklassen zusammenhängt. Ich bin mir sicher, dass meine Verwirrung vollständig das Ergebnis meines Unverständnisses ist und möchte daher eine Klärung herbeiführen. Vielen Dank.

+2

Dies kann Ihnen helfen, sie besser zu verstehen: http://stackoverflow.com/questions/25803628/grails-the-use-of-service-layer/25804208#25804208 –

Antwort

7

Sie scheinen ein Wrapper um Domain-Klassen zu sein ...

Sie Befehlsobjekte, die Art und Weise verwenden können, aber das ist nicht ihre primäre Verwendung.

Befehlsobjekte sind nützlich, wenn Sie eine Gruppe von Anforderungsparametern einkapseln und etwas mit ihnen zusammen ausführen möchten. Dieses Etwas könnte etwas mit Domain-Klassen zu tun haben oder auch nicht.

Zum Beispiel könnten Sie eine Grails-App haben, die überhaupt keine Domänenklassen hat und Befehlsobjekte könnten immer noch sehr hilfreich sein. Stellen Sie sich eine Grails-App vor, die nur eine Service-Schicht ist, die Anfragen von Webformularen oder REST-Anfragen mit einem JSON-Body oder was auch immer empfängt und die Grails-App diese Anfragen empfängt, die Eingaben validiert, vielleicht etwas Mathe oder irgendetwas und dann REST-Aufruf an einen anderen Back-End-Prozess, der sie möglicherweise in einer Datenbank speichert oder Berichte oder was auch immer erzeugt. In einer solchen Situation gibt es viele Gründe, warum Sie Befehlsobjekte verwenden sollten, obwohl überhaupt keine Domänenklassen beteiligt sind.

Gehen Sie nicht davon aus, dass Befehlsobjekte an Domänenklassen gebunden sein müssen. Manchmal sind sie das, aber schränken Sie Ihr Denken nicht auf diesen Kontext ein. Verwenden Sie Befehlsobjekte, wenn Sie eine Gruppe von Anforderungsparametern zusammenführen und etwas damit tun möchten.

3

Ich neige dazu, Befehlsobjekte zu verwenden, die mit dem übereinstimmen, was in der UI-Schicht passiert, Formular-Submits können mit Befehlsobjekten validiert und dann an Dienste übergeben werden, die diese persistent machen. Es ist oft sinnvoll, wenn Ihr Domänenmodell anders ist als der UI-Fluss, mit dem Sie arbeiten.

Meine Domänenschicht kann auch lockere Einschränkungen als einige der Befehlsobjekte haben, wenn ich bestimmte Datenflüsse benötigen, um genügend Informationen bereitzustellen.

Verwandte Themen