2017-09-15 3 views
2

Im MVC-Muster entwickeln wir eine REST-Anwendung.Schreiben von Entscheidungsaussagen auf Kontrollschicht

Die Serviceschicht gibt Optional<T> zurück, wobei T jede Klasse sein könnte.

Also auf RESTController Schicht gibt es eine bedingte Anweisung, die prüft, ob das Ergebnis Optional.empty ist, dann zurück [] sonst tatsächliche Daten zurückgeben.

return ABCService.getById("").map(send actual data).orElse(Collections.empty()); 

Es ist eine schlechte Übung, diesen Code auf der Kontrollschicht zu schreiben ??

Wir geben Optional<T> zurück, weil wir nicht null zurückgeben möchten. Wenn wir diese Bedingung nicht auf der Control-Ebene verwenden, müssen wir auch Optional aus der Service-Ebene entfernen, was meiner Meinung nach keine gute Vorgehensweise ist.

Kann jemand bitte erklären, warum das Hinzufügen von oben Code nicht eine gute Praxis ist, was könnte Folgen?

+0

Es ist irritierend, dass "Do Something" und "Do Something ELSE" sind * Werte *, die die Intention von "map" und "orselse" entspricht, während ihre Inhalte vorschlagen, dass Sie tatsächlich eine Aktion beschreiben. – Holger

+2

Es ist eine schlechte Übung, wenn der Code keine Präsentationslogik ist und daher nicht im Controller enthalten sein sollte. Es ist eine gute Übung, wenn der Code eine Präsentationslogik ist und sich daher im Controller befinden sollte. Es hängt also alles davon ab, was ETWAS ETWAS IST und ETWAS SONST AUCH TUN. –

+0

Aktualisiert meine Frage. –

Antwort

1

Controller sind für die Darstellung von Daten in dem Format verantwortlich, das sie bereitstellen sollen. Sie verarbeiten keine Rohdaten (Vorgänge wie das Abrufen/Aktualisieren, die normalerweise von Diensten verarbeitet werden), sie sagen nur, wie diese Daten aussehen sollen.

Wenn Sie also glauben, dass .map(send actual data) nichts mit der Geschäftslogikschicht zu tun hat, ist Ihr Code-Snippet akzeptabel.

Eine weitere Frage bleibt, wie man eine Methode richtig schreibt, um diesen Fall zu verarbeiten. Laut "Clean Code" würde ich empfehlen, zwei Methoden zu schreiben (für leere bzw. nichtleere Daten).

+1

war das hilfreich? wenn es noch Fragen gibt, können Sie fragen :) – Andrew

+0

Ja, es gibt viele Fragen .. https://softwareengineering.stackexchange.com/questions/357565/writing-decision-statement-on-control-layer Ich fragte dies Frage hier ... N Leute sprechen, dass ich es hart mache, zurückzukommen ** Optional ** .. Ist es wirklich so ?? Gibt es etwas, was ich tun kann, um meine APIs nach Standard zu machen? –