Rails - TZI

Werbung
Einführung in Rails
Prof. Dr.-Ing. Carsten Bormann [email protected]
© 2004-2011 Carsten Bormann
1
Was ist eine Web-Anwendung?
 Client:
Browser, zeigt HTML/CSS/JavaScript an
 Server:
Web-Anwendung, hält Zustand
 Verbindung:
HTTP (Architekturprinzip: REST)
HTML, CSS, JS
HTTP
Server
User
© 2004-2011 Carsten Bormann
2
HTTP: Hypertext Transfer Protocol
und URIs (Uniform Resource Identifiers)
 Browser
– hat URI http://www.informatik.uni-bremen.de/modulanmeldung
– schickt an Web-Server per HTTP Anfrage
 GET
/modulanmeldung
Host: www.informatik.uni-bremen.de
 Web-Server
schickt Antwort mit Body
 <html>....
 Browser
zeigt Body an
– darin sind:
Links (weitere URIs ➔ GET),
Formulare (mit URIs ➔ POST)
© 2004-2011 Carsten Bormann
3
HTTP und URIs, REST
 Hypermedia
as the Engine of Application State
(HATEOAS)
– Server steuert über Body, was für URIs (Links/Formulare) aus
dem angezeigten UI verfolgt werden kann
 GET:
Anforderung weiterer Bodies
– URIs der verfolgten Links (<a href=...>)
– aber auch eingebettete Bilder etc. (<img src=...>)
 POST:
Auslösen von Aktionen
– URI steht in Formular (<form action=...>)
– Body wird bei Anfrage mitgeschickt (Formularinhalt)
 Ausserdem:
 (vgl.:
PUT, DELETE (nicht aus Browser)
CRUD: Create, Read, Update, Delete)
© 2004-2011 Carsten Bormann
4
HTML: Hypertext Markup Language
 Statischer
Inhalt der Webseite
– Text, evtl. geeignet strukturiert
<body><div class="header">...</div><p>...</p></body>
– eingebette Verweise auf Bilder etc.
<img src="..."/>
 Links,
Formulare (HATEOAS)
– <a href="http://www.tzi.de">TZI</a> ➔ GET
– <form action="http://.../anmeldungen">
<input.../></form> ➔ POST
 Verweise
 Basis:
auf CSS (Stil), JavaScript (Interaktion)
SGML (bzw. XML in XHTML)
 Document
Object Model (DOM):
– abstrakte Struktur des HTML-Dokuments
© 2004-2011 Carsten Bormann
5
DOM: Document Object Model
© 2004-2011 Carsten Bormann
6
CSS
 Cascading
 Haken
Style Sheets
sich in HTML-DOM ein
– Selektor: Welche Dom-Elemente sind betroffen
 hakt
in Elementname, Class-Attribut etc. ein
– Eigenschaften: Was wird wie eingestellt
 Eigenschaft:
Wert
– html {background-color: #eee}
body {font-size:75%;color:#222;background:#fff;
font-family:Optima, "Helvetica Neue", Arial,
Helvetica, sans-serif; width:450px; margin:0 auto;}
a {color:#06c; text-decoration:underline;}
.tiny {font-size:.5em; line-height:1.875em;}
 Direkt
in HTML (<style...> ... </style>)
 Referenz:
Stylesheet (<link
rel="stylesheet" href="...” .../>
)
© 2004-2011 Carsten Bormann
7
JavaScript
 Dynamische
Programmiersprache
– eine der Big 5
– besonderes Augenmerk auf Performance (V8, Jägermonkey, ...)
 Browser-spezifische
Objekte
– document: Document Object Model (DOM)
– window: das aktuelle Fenster
 Direkt
in HTML (<script...> ... </script>)
– auch über Attribute wie onclick
 Referenz
(<script src="..."/>)
© 2004-2011 Carsten Bormann
8
Server-Seite
 Web-Server
– Apache
– nginx
– Application-Server wie mongrel, thin
 CGI:
Common Gateway Interface
– Parameter der Anfrage im Environment
– HTTP-Header, Leerzeile, Body ➔ stdout
 Application-Server
emulieren dies meist
– Ruby: Rack
© 2004-2011 Carsten Bormann
9
Model-View-Controller (MVC)
SQL
Database
 Strukturmodell
für interaktive
Anwendungen
(➔Smalltalk)
=
Daten/Zustand
(Datenbank)
Model
Model
Model
 Model
Action
URI
HTTP
Routing
Controller
Controller
Controller
HTML, CSS, JS
View
View
View
 Controller
=
Interaktion
 View
HTTP
=
Ansicht
© 2004-2011 Carsten Bormann
10
Ruby on Rails
 2004
von David Heinemeier Hansson aus Basecamp
(37signals) extrahiert
 Ruby
+ DSL + Metaprogramming
 MIT-Lizenz
 Weihnachten
2008 mit Merb (Yehuda Katz)
zusammengeführt
 Rails
3.0
© 2004-2011 Carsten Bormann
11
Rails: Komponenten
 Models:
Active-Record
– ORM (object-relational mapper)
 Programm
denkt in Objekten; SQL-Datenbank denkt in Relationen
– Pro Tabelle eine Klasse, kann pro Zeile ein Objekt anlegen
– Repräsentiert meist die Geschäftslogik
 Controller,
Views, Routing: Action-Pack
– Routing: Wandelt Anfrage (URI) in Controller/Action/Parameter
– Controller: Instanz wird bei Anfrage angelegt, Action aufgerufen
– View: kein reines Ruby, sondern ERB oder HAML
 pro
Controller/Aktion
 Layout-Views
 Infrastruktur:
Railties, Active-Support
– Active-Support erweitert Ruby um nützliche Idiome
© 2004-2011 Carsten Bormann
12
Controller (show: GET-Aktion)
© 2004-2011 Carsten Bormann
13
View
(Dazu kommt ein Layout)
© 2004-2011 Carsten Bormann
14
Controller (create: POST-Aktion)
© 2004-2011 Carsten Bormann
15
Model
...
© 2004-2011 Carsten Bormann
16
Datenbankschema
 Aufbau
über Migrationen
– Hinzufügen, Löschen von Tabellen und Spalten
– Evtl. Aktionen für Migration der Daten
 Entstehendes
Schema wird als Ruby-DSL verwaltet
© 2004-2011 Carsten Bormann
17
Konventionen
 Viel
wird von Rails einfach vorgegeben
 Standard-Action-Namen:
– collection: index, create,
member: show, update, destroy,
(collection: new, member: edit)
 Standard-Routing,
URI-Helper
 ...
 Singular-Plural,
Groß-/Kleinschreibung:
– Tabelle “orders”
– Klasse “Order”
 Struktur
der Verzeichnisse, Namen der Dateien
© 2004-2011 Carsten Bormann
18
Rails: Struktur einer Anwendung
© 2004-2011 Carsten Bormann
19
Generatoren
 Generator
für ganze Anwendung:
$ rails new anwendungsname
 Generatoren
$
$
$
$
rails
rails
rails
rails
für Modelle, Controller etc.
generate
generate
generate
generate
controller Pages home contact
model User name:string email:string
migration add_email_uniqueness_index
integration_test users
 Scaffolding:
$ rails generate scaffold User name:string email:string
– erzeugt Gerüst für Model und Controller
– kann Arbeit stark abkürzen
– kann aber auch Korsett liefern...
© 2004-2011 Carsten Bormann
20
© 2004-2011 Carsten Bormann
21
Rails-Server
 Rails
benutzt Webrick oder Mongrel
 rails
s
(Abkürzung für rails server)
 http://localhost:3000
© 2004-2011 Carsten Bormann
22
Bundler
 Eine
Rails-Anwendung enthält ein halbes bis mehrere
Dutzend Gems
 Wie
sicherstellen, dass die Versionen zueinander
passen?
 Bundler:
auch ein Gem (z.Z. Version 1.0.10)
– bundle install
 Arbeitet
mit rvm zusammen: gemsets
– freischwimmen von veralteten Betriebssystemumgebungen
© 2004-2011 Carsten Bormann
23
Installation/Voraussetzungen
 Ruby-Installation
auf dem Laptop
– Windows: railsinstaller
– Besser: Linux/OSX mit rvm
– Ruby-Version: 1.9.2p136
 rails
 git
3.0.3, sqlite3-ruby, rspec, rspec-rails, webrat
(empfohlen) und/oder Subversion
 Entwicklungsumgebung?
Freie Wahl
– IDEs: Eclipse (RadRails), NetBeans, ...
– Textmate, e
– Emacs, vim
 Browser
– Safari, Chrome, Firefox (mit Firebug)
© 2004-2011 Carsten Bormann
24
Vorgehen in der LV
 Aufgabenstellung
 Umsetzung
 Planning
durch „Kunden“
durch Euch
Game, Story Cards, Features, Tasks
 TDD!
 Kommunikation
zwischen Gruppen (Tip-Jar!)
 Kommunikationsrunden
 (Inhalte:)
Neue Themen pro Tag, ggfs einbauen
© 2004-2011 Carsten Bormann
25
Aufgabenstellungen
 Die
Aufgabenstellungen geben die mehr oder minder
naive Vorstellung eines Kunden wieder.
 Manche
Aspekte sind nicht realisierbar.
 Manche
würden gehen, ergeben dann aber in der
Benutzung wenig Sinn.
 Manche
sind realisierbar, aber zu aufwendig (Budget:
10 Tage!)
© 2004-2011 Carsten Bormann
26
Vorgehen
 Aufgabenstellung
 Ziele
interpretieren
(evtl. mit Auftraggeber) priorisieren
– Aufwand
– Wirkung
 Erste
Version einer Implementierung generieren
– Dokumente können, müssen aber nicht dazugehören
– Wichtig: Diese Version muss fertig werden!
 Feedback-Schleife
 goto
mit Auftraggeber
1
© 2004-2011 Carsten Bormann
27
Iterationen
 Wir
wissen nicht:
– welche Features wirklich notwendig sind
– was die Features kosten, und für wieviele wir Zeit haben werden
 All
successful systems start simple.
 Work
for outcome: Continuous delivery of value
 Abends
fertig nach Hause gehen.
© 2004-2011 Carsten Bormann
28
Problem vs. Lösung
 Kunde
hat vielleicht schon eine Lösung im Kopf
 Wir
wollen aber sein Problem lösen!
Stories können dabei helfen, das Problem einzufangen.
 Die
Vorstellungskraft ist begrenzt.
Nicht abstrakt, sondern
über die entstehende Anwendung kommunizieren.
© 2004-2011 Carsten Bormann
29
Paarprogrammierung
 You
never code alone.
– Driver: sitzt an Tastatur/Maus.
– Navigator: Denkt, denkt mit
 Naive
Sicht: Halbe Produktivität.
 Tatsächlich:
– Weniger Zeitverschwendung durch Debugging.
– Schnellere Entwicklung!
 TDD:
Red/green/refactor
© 2004-2011 Carsten Bormann
30
Vorgehen bis 21.02.2011
 http://railstutorial.org/book
durcharbeiten
– 12 Kapitel: eines pro Tag!
 Möglichst
viel in der Gruppe zusammen machen
– Paarprogrammierung üben
 Wäsche
 Am
waschen, Kühlschrank füllen :-)
21.02.2011, 09:15: Gruppen festnageln
– Montag: Sprint (alle Gruppen haben gleiche Aufgabe)
– Ab Dienstag arbeiten Gruppen in ihren einzelnen Projekten
© 2004-2011 Carsten Bormann
31
Herunterladen