5 Stimmen

Nicht-CRUD-Controller-Aktionen

Dies könnte wie ein n00b Frage scheinen, aber ich versuche, einige meiner schlechten Praxis zu brechen, die ich mit MVC angenommen haben kann, so hoffe ich, Sie können mir helfen

Also, stellen Sie sich vor, ich möchte so etwas wie "CSV hochladen und analysieren", es scheint nicht offensichtlich zu mir, um es in das CRUD-Muster passen... Ich bin nicht mit der DB interagieren, so dass ich nicht hinzufügen oder aktualisieren oder löschen, aber ich möchte noch in der Lage sein, die Aktion in einer sinnvollen Weise von verschiedenen Ansichten zu verwenden. So ist es "ok", nur eine Aktion namens "UploadCSV" und haben es über eine URL wie "/data/uploadcsv" zugänglich sein

Ihre Gedanken sind uns sehr willkommen!

Tom

1voto

Michael Gattuso Punkte 12820

Es klingt, als ob Sie von RESTful-Ideen sprechen (mit Aktionen namens index, create, new, edit, update, destroy, show).

In MVC können Sie eine Aktion weitgehend aufrufen, was Sie wollen (also ja, Sie können es uploadcsv nennen, wenn Sie wollen). Wenn Sie möchten, dass die Aktion den RESTful-Prinzipien entspricht, sollten Sie sich überlegen, was die Aktion tut (z. B. ist ein Datenupload im Wesentlichen eine Erstellungs- oder Aktualisierungsfunktion), und sie mit einem der RESTful-Aktionsnamen benennen.

0voto

Milan Novota Punkte 15296

Die Dauerhaftigkeit der Ressource ist hier nicht entscheidend. Ich nehme an, dass Sie hier Folgendes tun: Sie erstellen eine Art Ressource (wenn auch nicht dauerhaft) aus der bereitgestellten csv-Datei. Hier geht es darum, darüber nachzudenken, was diese csv-Datei darstellt. Was steht da drin? Handelt es sich um etwas, das zu einer Sammlung von Ressourcen in Ihrem System wird, oder handelt es sich um die Darstellung eines einzigen Objekts in Ihrem System? Wenn Sie darüber nachdenken, dann muss sein etwas Konkretes. Können Sie Ihren Problembereich genauer beschreiben?

0voto

Ich glaube, ich vertrete denselben Standpunkt wie Sie.

Bei meinen Projekten versuche ich, so viel Ruhe wie möglich zu haben, wann immer ich kann. Aber wie Sie sagten, manchmal passt ein spezieller Fall einfach nicht.

Schließlich ist es auch eine Frage des "Gefühls". Wenn Sie eine csv-Importfunktion bereitstellen, halte ich es für völlig richtig, keine vollständige REST-Implementierung für CSV zu erstellen.

Nehmen wir an, Sie haben in Ihrer Anwendung Kunden. Und Sie möchten den Kunden die Möglichkeit geben, Daten im csv-Format zu importieren. Sie können eine Route für diese Aktion mit hinzufügen:

map.resources :clients, :member => { :uploadcsv => :get }

Die Route ist ordnungsgemäß deklariert, die Ressource "Clients" ist vollständig "restful" und Sie haben eine zusätzliche Aktion, die ordnungsgemäß deklariert ist, um den Datenimport zu verwalten.

Die einzige Warnung, die ich habe, ist: Verwenden Sie nicht eine Route wie diese "/data/uploadcsv". Meiner Meinung nach fehlt es ihr an Klarheit. Ich möchte in der Lage sein zu verstehen, was meine Anwendung tun wird, wenn ich mir die URL ansehe. Und "/data" ist für mich zu vage :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X