Neu: udemy Kurs Ruby für Anfänger von Stefan Wintermeyer

3.8. Misc

Sie haben jetzt schon mal eine einfache Rails-Applikation ausgeführt und werden im nächsten Kapitel tief ins Thema ActiveRecord einsteigen. Deshalb an dieser Stelle eine minimale Erklärung zu einigen Begrifflichkeiten, die in der Rails-Welt immer mal wieder auftauchen.

"Model View Controller"-Architektur (MVC)

Laut http://de.wikipedia.org/wiki/Model_View_Controller heißt MVC im Deutschen "Modell-Präsentation-Steuerung". Das macht die Sache schon viel einfacher. ;-)
MVC ist eine Struktur zur Software-Entwicklung. Man hat sich einfach darauf geeinigt, dass ein Teil der Software an dieser Stelle und ein anderer Teil der Software immer an einer anderen Stelle ist. Nicht mehr und nicht weniger. Diese Einigung birgt den enormen Vorteil, dass man nach einer gewissen Einarbeitungszeit genau weiß, wo man welche Funktionalität in einem Rails-Projekt suchen bzw. neu einbauen muss.

Model

"Model" steht hier für Datenmodel. Per Default handelt es sich bei Rails-Applikationen um ein ActiveRecord-Datenmodell (siehe Kapitel 4, ActiveRecord).
Alle Models finden Sie im Verzeichnis app/models/.

View

Der "View" ist für die Präsentation der Applikation zuständig. Er übernimmt das Rendern der Webseite, einer XML- oder JSON-Datei. Ein View könnte aber auch ein PDF oder einen ASCII-Text rendern. Das hängt ganz von Ihrer Applikation ab.
Alle Views finden Sie im Verzeichnis app/views/.

Controller

Nachdem ein Webseitenaufruf in einer Route (siehe Kapitel 6, Routen (routes)) gelandet ist, kommt er von dort in den Controller. Die Route gibt dabei als Ziel eine bestimmte Methode (Action) an. Diese Methode kann dann gewünschte Aufgaben (z. B. einen bestimmten Datensatz suchen und in einer Instanz-Variable abspeichern) erfüllen und lässt danach den gewünschten View rendern.
Alle Controller finden Sie im Verzeichnis app/controllers/.

Helper

Eine Helper-Methode nimmt Ihnen wiederholende Arbeiten in einem View ab. Wenn Sie z. B. bei einer Hotel-Bewertung Sterne (*) und nicht eine Zahl von 1 bis 5 anzeigen wollen, so können Sie folgenden Helper in der Datei app/helpers/application_helper.rb definieren:
module ApplicationHelper

  def render_stars(value)
    output = ''
    if (1..5).include?(value)
      value.times { output += '*'}
    end
    output
  end

end
Mit diesem Helper können wir dann in einem View den folgenden Code anwenden:
<p>
<b>Bewertung:</b> <%= render_stars(5) %>
</p>
Sie können einen Helper auch in der Console ausprobieren:
MacBook:webshop xyz$ rails console
Loading development environment (Rails 3.2.5)
1.9.3-p194 :001 > helper.render_stars(5)
 => "*****" 
1.9.3-p194 :002 > exit
MacBook:webshop xyz$
Es gibt von Rails eine Menge vordefinierter Helper, die wir in den nächsten Kapiteln benutzen werden. Sie können aber auch selber Helper definieren. Dabei können alle Helper aus der Datei app/helpers/application_helper.rb in jedem View angewendet werden. Helper, die nur in bestimmten Views verfügbar sein sollen, müssen pro Controller definiert werden. Beim Erstellen eines Controllers wird automatisch in app/helpers eine Datei für Helper dieses Controllers erstellt. Diese bietet die Möglichkeit, Helper nur für diesen Controller bzw. für die Views dieses Controllers zu definieren.
Alle Helper finden Sie im Verzeichnis app/helpers/.

DRY – Don't repeat yourself

Viele Rails-Programmierer sind große DRY-Fans. DRY heißt nichts anderes, als dass man versuchen sollte, sich wiederholende Programmierlogik in eigene Methoden auszulagern.

Refactoring

Im Zusammenhang von DRY wird oft das Wort Refactoring benutzt. Dabei geht es um funktionierende Applikationen, die weiter optimiert werden. Die Applikation an sich verändert dabei nicht Ihre Oberfläche. Sie wird im Kern aber u. a. durch DRY optimiert.

Convention Over Configuration

Convention over configuration (auf Deutsch Konvention vor Konfiguration siehe http://de.wikipedia.org/wiki/Konvention_vor_Konfiguration) ist ein wichtiger Grundpfeiler einer Rails-Applikation. Es sagt aus, dass der Programmierer sich beim Start eines Projektes nicht erst für bestimmte Features entscheiden und diese per Konfigurationsparameter einstellen muss. Es gibt einen Grund-Konsens und dieser ist per Default eingestellt. Erst wenn man außerhalb dieses Grund-Konsenses arbeiten will, dann muss man die entsprechenden Parameter verändern.