SlideShare ist ein Scribd-Unternehmen logo
Refactoring Rails Applications Mathias Meyer und Jonathan Weiss, 01.09.2009 Peritor GmbH
Who am I ? Jonathan Weiss   Consultant bei Peritor GmbH in Berlin Specialized in Rails, Scaling, Deployment, and Code Review Webistrano - Rails deployment tool FreeBSD Rubygems and Ruby on Rails maintainer http://www.peritor.com http://blog.innerewut.de
Who am I ? Mathias Meyer Chief Cloud Officer bei Peritor GmbH in Berlin Rubyist Asynchronist Post-Relationalist http://www.paperplanes.de http://www.dailyawswtf.com
Refactoring Definition: Refactoring bezeichnet die manuelle oder automatisierte Strukturverbesserung von Programm-Quelltexten unter Beibehaltung des beobachtbaren Programm-Verhaltens. Dabei sollen die Lesbarkeit, Verständlichkeit, Wartbarkeit und Erweiterbarkeit verbessert werden, mit dem Ziel, den jeweiligen Aufwand für Fehleranalyse und funktionale Erweiterungen deutlich zu senken. Wikipedia
Von
Zu
Und zu
Wie?
Live Coding & Übung
Grundlagen
MVC
Model Business-Model Domain-Logik Wiederverwendbar
Was macht das Model? Business-Logik kapseln Nicht direkt auf Requests und Sessions zugreifen, höchstens indirekt Schnittstelle zur Datenbank
View “ Dumme” Präsentation nach außen Peilt spezifischen Use-Case an Stellt Information dar Unterschiedliche Sichtweisen auf Model
Was darf der View? Repräsentation erzeugen Keine komplexeren Querys oder Code-Schnipsel So wenig Instanzvariablen wie möglich verwenden Datenbank-Querys aus dem View sind kein Verbrechen
Controller Dirigiert und verbindet Vermittelt ans Model Delegieren anstatt schuften
Was macht der Controller? Model finden und Aufrufe ins Model machen (Mediator) Bestimmen welche Template zu rendern ist Authentifiziering, Authorisierung
D R Y Principles
You Ain’t Gonna Need It Ron Jeffries: Implementiere Dinge nur wenn du sie tatsächlich brauchst, nicht wenn du denkst dass du sie brauchst.
Live Coding Experiment
Redmine A load-balancer distributes the incoming requests Some load-balancers will deliver static requests themselves Several Rails instances handle all requests Number of concurrent requests equals number of Rails instances
Redmine In Entwicklung seit 2006 Noch auf Rails 2.1 Viele Faux-Pas die jeder mal gemacht hat
Redmine Multiple projects support Flexible role based access control Flexible issue tracking system Gantt chart and calendar News, documents & files management Feeds & email notifications Per project wiki Per project forums Time tracking SCM integration (SVN, CVS, Git, Mercurial, Bazaar and Darcs)
Do Models einführen wo angebracht, es besteht kein Datenbank-Zwang Es ist in Ordnung, Parameter ins Model zu reichen und dort zu verarbeiten View-Code gleichmäßig einrücken, wie allen anderen Code auch Dinge mit ordentlichen Namen versehen, lieber zu lang als zu kurz Helper verwenden anstatt Logik in den View zu stopfen Noch besser: Logik ins Model verschieben
Do Ein Auge auf neue Rails-Features haben, machen u.U. das Leben leichter z.B. Object#try, Named-Scopes, Einfacheres render in Rails 2.3 Es muss nicht RESTful sein, Ressourcen sind aber als Guideline sinnvoll Code in Module auslagern, egal ob im Controller oder Model Komplexe Finder gehören ins Model, named_scopes to the rescue
Don’t Benutze nie Fixtures self nur benutzen wo unbedingt notwendig Einige Exceptions muss man nicht selbst abfangen Keine Instanzvariablen im Controller nur für Darstellungslogik
Don’t Zugriff auf Instanzvariablen in Partials vermeiden, lokal gewinnt! Komplizierte Konditionen sind State, gehören in Extra-Methoden Exceptions wiederholt in Actions abfangen, rescue_action_in_public Anstatt request.get? und request.post? neue Action einführen return in einer Controller-Action Validierungen im Controller, gehören ins Model
Praktischer Teil
Q & A
Peritor GmbH Blücherstr. 22 10961 Berlin Telefon: +49 (0)30 69 20 09 84 0 Telefax:  +49 (0)30 69 20 09 84 9 Internet: www.peritor.com E-Mail: kontakt@peritor.com  Peritor GmbH - Alle Rechte vorbehalten

Weitere ähnliche Inhalte

PPTX
Creasoft Akademie - Deep Dive into ASP.NET MVC
PDF
WKO Fachgruppentagung Umsetzungsqualität von Projekten
PDF
IANUA NOVA BROCHURA - DE
DOCX
8 Day Tour www.philipptours.com
PPTX
B2B E-Commerce - Neue Chancen für Industrieunternehmen
ODP
Bilder SEO Vortrag Missfeldt Campixx 2010
PDF
Laboquim2011
PPTX
Sitzt Du zu lange? 10 wissenschaftliche Erkenntnisse über die Vorteile von St...
Creasoft Akademie - Deep Dive into ASP.NET MVC
WKO Fachgruppentagung Umsetzungsqualität von Projekten
IANUA NOVA BROCHURA - DE
8 Day Tour www.philipptours.com
B2B E-Commerce - Neue Chancen für Industrieunternehmen
Bilder SEO Vortrag Missfeldt Campixx 2010
Laboquim2011
Sitzt Du zu lange? 10 wissenschaftliche Erkenntnisse über die Vorteile von St...

Andere mochten auch (20)

PPT
Maximilian Kolbe
PDF
Hidroterapia
PPT
Elefantes
PDF
Web 2.0 für Unternehmen
DOCX
Macromedia flash 8
PPT
Manual del Usuario
PPTX
Delitos informaticos avance
DOC
La espiritualidad del_hombre_resumen_parte_i
PPTX
Modelos de educación y comunicación
PPT
Cáncer de mama vicky-mauri
PPTX
El uso de la tecnologia en la medicina
PPT
Aprendizaje colaborativo naty
PPS
Lo que se quiere destruir...ch.cm
PPT
Competencias tic para_nivel_de_transicion(2)
PDF
Manual Router Yota Vigor fly200
PDF
El extraño caso de dr
PPT
Cáncer de mama vicky y mauricio
DOC
La diabetes
PPTX
PDF
Mktg
Maximilian Kolbe
Hidroterapia
Elefantes
Web 2.0 für Unternehmen
Macromedia flash 8
Manual del Usuario
Delitos informaticos avance
La espiritualidad del_hombre_resumen_parte_i
Modelos de educación y comunicación
Cáncer de mama vicky-mauri
El uso de la tecnologia en la medicina
Aprendizaje colaborativo naty
Lo que se quiere destruir...ch.cm
Competencias tic para_nivel_de_transicion(2)
Manual Router Yota Vigor fly200
El extraño caso de dr
Cáncer de mama vicky y mauricio
La diabetes
Mktg
Anzeige

Ähnlich wie Refactoring Rails Applications (19)

PDF
Ruby on Rails in a metro session
PDF
Blind Date mit Rails - Rails-Einführung
PDF
Einführung in Ruby On Rails
PDF
Agile Softwareentwicklung mit Rails
PDF
An Introduction to Ruby On Rails
KEY
Ruby on Rails SS09 02
PDF
Ruby on Rails
PDF
Ruby On Rails Hermann Stern Bcklu
KEY
Ruby on Rails SS09 08
PPT
Ruby On Rails Einführung
KEY
Ruby On Rails Vorlesung 1 Rails Überblick
PDF
Domain Driven Design in Rails
PDF
Lehmanns Rails Erweitern
KEY
Ruby on Rails SS09 11
PDF
Performanter, hochskalierbarer Web 2.0-Dienst in Ruby
KEY
Julian Fischer Ruby On Rails
PDF
Ruby on Rails - Eine kurze Einführung
PDF
Ruby und Rails für .NET Entwickler
PDF
Ruby On Rails - 2. Rails Introduction
Ruby on Rails in a metro session
Blind Date mit Rails - Rails-Einführung
Einführung in Ruby On Rails
Agile Softwareentwicklung mit Rails
An Introduction to Ruby On Rails
Ruby on Rails SS09 02
Ruby on Rails
Ruby On Rails Hermann Stern Bcklu
Ruby on Rails SS09 08
Ruby On Rails Einführung
Ruby On Rails Vorlesung 1 Rails Überblick
Domain Driven Design in Rails
Lehmanns Rails Erweitern
Ruby on Rails SS09 11
Performanter, hochskalierbarer Web 2.0-Dienst in Ruby
Julian Fischer Ruby On Rails
Ruby on Rails - Eine kurze Einführung
Ruby und Rails für .NET Entwickler
Ruby On Rails - 2. Rails Introduction
Anzeige

Mehr von Jonathan Weiss (20)

PDF
Docker on AWS OpsWorks
PDF
ChefConf 2014 - AWS OpsWorks Under The Hood
PDF
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
PPTX
DevOpsDays Amsterdam - Observations in the cloud
PDF
Amazon SWF and Gordon
PDF
Introduction to Backbone.js
PDF
Scalarium and CouchDB
PDF
Build your own clouds with Chef and MCollective
PDF
NoSQL - Motivation and Overview
PDF
NoSQL - An introduction to CouchDB
PDF
Running on Amazon EC2
PDF
Amazon EC2 in der Praxis
PDF
Infrastructure Automation with Chef
PDF
Rails in the Cloud
PDF
EventMachine
PDF
CouchDB on Rails
PDF
Rails in the Cloud - Experiences from running on EC2
PDF
CouchDB on Rails - RailsWayCon 2010
PDF
CouchDB on Rails - FrozenRails 2010
PDF
NoSQL - Post-Relational Databases - BarCamp Ruhr3
Docker on AWS OpsWorks
ChefConf 2014 - AWS OpsWorks Under The Hood
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
DevOpsDays Amsterdam - Observations in the cloud
Amazon SWF and Gordon
Introduction to Backbone.js
Scalarium and CouchDB
Build your own clouds with Chef and MCollective
NoSQL - Motivation and Overview
NoSQL - An introduction to CouchDB
Running on Amazon EC2
Amazon EC2 in der Praxis
Infrastructure Automation with Chef
Rails in the Cloud
EventMachine
CouchDB on Rails
Rails in the Cloud - Experiences from running on EC2
CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - FrozenRails 2010
NoSQL - Post-Relational Databases - BarCamp Ruhr3

Refactoring Rails Applications

  • 1. Refactoring Rails Applications Mathias Meyer und Jonathan Weiss, 01.09.2009 Peritor GmbH
  • 2. Who am I ? Jonathan Weiss Consultant bei Peritor GmbH in Berlin Specialized in Rails, Scaling, Deployment, and Code Review Webistrano - Rails deployment tool FreeBSD Rubygems and Ruby on Rails maintainer http://www.peritor.com http://blog.innerewut.de
  • 3. Who am I ? Mathias Meyer Chief Cloud Officer bei Peritor GmbH in Berlin Rubyist Asynchronist Post-Relationalist http://www.paperplanes.de http://www.dailyawswtf.com
  • 4. Refactoring Definition: Refactoring bezeichnet die manuelle oder automatisierte Strukturverbesserung von Programm-Quelltexten unter Beibehaltung des beobachtbaren Programm-Verhaltens. Dabei sollen die Lesbarkeit, Verständlichkeit, Wartbarkeit und Erweiterbarkeit verbessert werden, mit dem Ziel, den jeweiligen Aufwand für Fehleranalyse und funktionale Erweiterungen deutlich zu senken. Wikipedia
  • 5. Von
  • 6. Zu
  • 9. Live Coding & Übung
  • 11. MVC
  • 13. Was macht das Model? Business-Logik kapseln Nicht direkt auf Requests und Sessions zugreifen, höchstens indirekt Schnittstelle zur Datenbank
  • 14. View “ Dumme” Präsentation nach außen Peilt spezifischen Use-Case an Stellt Information dar Unterschiedliche Sichtweisen auf Model
  • 15. Was darf der View? Repräsentation erzeugen Keine komplexeren Querys oder Code-Schnipsel So wenig Instanzvariablen wie möglich verwenden Datenbank-Querys aus dem View sind kein Verbrechen
  • 16. Controller Dirigiert und verbindet Vermittelt ans Model Delegieren anstatt schuften
  • 17. Was macht der Controller? Model finden und Aufrufe ins Model machen (Mediator) Bestimmen welche Template zu rendern ist Authentifiziering, Authorisierung
  • 18. D R Y Principles
  • 19. You Ain’t Gonna Need It Ron Jeffries: Implementiere Dinge nur wenn du sie tatsächlich brauchst, nicht wenn du denkst dass du sie brauchst.
  • 21. Redmine A load-balancer distributes the incoming requests Some load-balancers will deliver static requests themselves Several Rails instances handle all requests Number of concurrent requests equals number of Rails instances
  • 22. Redmine In Entwicklung seit 2006 Noch auf Rails 2.1 Viele Faux-Pas die jeder mal gemacht hat
  • 23. Redmine Multiple projects support Flexible role based access control Flexible issue tracking system Gantt chart and calendar News, documents & files management Feeds & email notifications Per project wiki Per project forums Time tracking SCM integration (SVN, CVS, Git, Mercurial, Bazaar and Darcs)
  • 24. Do Models einführen wo angebracht, es besteht kein Datenbank-Zwang Es ist in Ordnung, Parameter ins Model zu reichen und dort zu verarbeiten View-Code gleichmäßig einrücken, wie allen anderen Code auch Dinge mit ordentlichen Namen versehen, lieber zu lang als zu kurz Helper verwenden anstatt Logik in den View zu stopfen Noch besser: Logik ins Model verschieben
  • 25. Do Ein Auge auf neue Rails-Features haben, machen u.U. das Leben leichter z.B. Object#try, Named-Scopes, Einfacheres render in Rails 2.3 Es muss nicht RESTful sein, Ressourcen sind aber als Guideline sinnvoll Code in Module auslagern, egal ob im Controller oder Model Komplexe Finder gehören ins Model, named_scopes to the rescue
  • 26. Don’t Benutze nie Fixtures self nur benutzen wo unbedingt notwendig Einige Exceptions muss man nicht selbst abfangen Keine Instanzvariablen im Controller nur für Darstellungslogik
  • 27. Don’t Zugriff auf Instanzvariablen in Partials vermeiden, lokal gewinnt! Komplizierte Konditionen sind State, gehören in Extra-Methoden Exceptions wiederholt in Actions abfangen, rescue_action_in_public Anstatt request.get? und request.post? neue Action einführen return in einer Controller-Action Validierungen im Controller, gehören ins Model
  • 29. Q & A
  • 30. Peritor GmbH Blücherstr. 22 10961 Berlin Telefon: +49 (0)30 69 20 09 84 0 Telefax: +49 (0)30 69 20 09 84 9 Internet: www.peritor.com E-Mail: kontakt@peritor.com  Peritor GmbH - Alle Rechte vorbehalten