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

Andere mochten auch

Hidroterapia
Hidroterapia Hidroterapia
Hidroterapia
Carlos Orellana Díaz
 
Elefantes
ElefantesElefantes
Elefantes
UTEPSA
 
Web 2.0 für Unternehmen
Web 2.0 für UnternehmenWeb 2.0 für Unternehmen
Web 2.0 für Unternehmen
Prof. Dr. Manfred Leisenberg
 
Macromedia flash 8
Macromedia flash 8Macromedia flash 8
Macromedia flash 8
Marco Maguito
 
Manual del Usuario
Manual del UsuarioManual del Usuario
Manual del Usuario
selene46
 
Delitos informaticos avance
Delitos informaticos  avanceDelitos informaticos  avance
Delitos informaticos avance
romanelapalza
 
La espiritualidad del_hombre_resumen_parte_i
La espiritualidad del_hombre_resumen_parte_iLa espiritualidad del_hombre_resumen_parte_i
La espiritualidad del_hombre_resumen_parte_i
estudia medicina
 
Modelos de educación y comunicación
Modelos de educación y comunicaciónModelos de educación y comunicación
Modelos de educación y comunicación
grupoaccion
 
Cáncer de mama vicky-mauri
Cáncer de mama  vicky-mauriCáncer de mama  vicky-mauri
Cáncer de mama vicky-mauri
mauriciovicky
 
El uso de la tecnologia en la medicina
El uso de la tecnologia en la medicinaEl uso de la tecnologia en la medicina
El uso de la tecnologia en la medicina
giraldodaniela
 
Aprendizaje colaborativo naty
Aprendizaje colaborativo natyAprendizaje colaborativo naty
Aprendizaje colaborativo naty
naticitacerda
 
Lo que se quiere destruir...ch.cm
Lo que se quiere destruir...ch.cmLo que se quiere destruir...ch.cm
Lo que se quiere destruir...ch.cm
Joaco Morales
 
Competencias tic para_nivel_de_transicion(2)
Competencias tic para_nivel_de_transicion(2)Competencias tic para_nivel_de_transicion(2)
Competencias tic para_nivel_de_transicion(2)
nenaguarni89
 
Manual Router Yota Vigor fly200
Manual Router Yota Vigor fly200 Manual Router Yota Vigor fly200
Manual Router Yota Vigor fly200
Arnold Salgado
 
El extraño caso de dr
El extraño caso de drEl extraño caso de dr
El extraño caso de dr
PROFEMARA
 
Cáncer de mama vicky y mauricio
Cáncer de mama  vicky y mauricioCáncer de mama  vicky y mauricio
Cáncer de mama vicky y mauricio
mauriciovicky
 
La diabetes
La diabetesLa diabetes
La diabetes
neli1989
 
Lucia
LuciaLucia
Mktg
MktgMktg
Mktg
margi2011
 

Andere mochten auch (20)

Maximilian Kolbe
Maximilian KolbeMaximilian Kolbe
Maximilian Kolbe
 
Hidroterapia
Hidroterapia Hidroterapia
Hidroterapia
 
Elefantes
ElefantesElefantes
Elefantes
 
Web 2.0 für Unternehmen
Web 2.0 für UnternehmenWeb 2.0 für Unternehmen
Web 2.0 für Unternehmen
 
Macromedia flash 8
Macromedia flash 8Macromedia flash 8
Macromedia flash 8
 
Manual del Usuario
Manual del UsuarioManual del Usuario
Manual del Usuario
 
Delitos informaticos avance
Delitos informaticos  avanceDelitos informaticos  avance
Delitos informaticos avance
 
La espiritualidad del_hombre_resumen_parte_i
La espiritualidad del_hombre_resumen_parte_iLa espiritualidad del_hombre_resumen_parte_i
La espiritualidad del_hombre_resumen_parte_i
 
Modelos de educación y comunicación
Modelos de educación y comunicaciónModelos de educación y comunicación
Modelos de educación y comunicación
 
Cáncer de mama vicky-mauri
Cáncer de mama  vicky-mauriCáncer de mama  vicky-mauri
Cáncer de mama vicky-mauri
 
El uso de la tecnologia en la medicina
El uso de la tecnologia en la medicinaEl uso de la tecnologia en la medicina
El uso de la tecnologia en la medicina
 
Aprendizaje colaborativo naty
Aprendizaje colaborativo natyAprendizaje colaborativo naty
Aprendizaje colaborativo naty
 
Lo que se quiere destruir...ch.cm
Lo que se quiere destruir...ch.cmLo que se quiere destruir...ch.cm
Lo que se quiere destruir...ch.cm
 
Competencias tic para_nivel_de_transicion(2)
Competencias tic para_nivel_de_transicion(2)Competencias tic para_nivel_de_transicion(2)
Competencias tic para_nivel_de_transicion(2)
 
Manual Router Yota Vigor fly200
Manual Router Yota Vigor fly200 Manual Router Yota Vigor fly200
Manual Router Yota Vigor fly200
 
El extraño caso de dr
El extraño caso de drEl extraño caso de dr
El extraño caso de dr
 
Cáncer de mama vicky y mauricio
Cáncer de mama  vicky y mauricioCáncer de mama  vicky y mauricio
Cáncer de mama vicky y mauricio
 
La diabetes
La diabetesLa diabetes
La diabetes
 
Lucia
LuciaLucia
Lucia
 
Mktg
MktgMktg
Mktg
 

Ähnlich wie Refactoring Rails Applications

Einführung in Ruby On Rails
Einführung in Ruby On RailsEinführung in Ruby On Rails
Einführung in Ruby On Rails
foobar2605
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
Angelo Maron
 
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
QAware GmbH
 
SeoDay 2017: Mikroprozesse im SEO
SeoDay 2017: Mikroprozesse im SEOSeoDay 2017: Mikroprozesse im SEO
SeoDay 2017: Mikroprozesse im SEO
get traction GmbH
 
CDI
CDICDI
Ruby on Rails in a metro session
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro session
Virttoo org
 
Software Metrics and Continuous Integration
Software Metrics and Continuous IntegrationSoftware Metrics and Continuous Integration
Software Metrics and Continuous Integration
Milena Reichel
 
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
Aberla
 
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
QAware GmbH
 
MVVM mit WPF
MVVM mit WPFMVVM mit WPF
MVVM mit WPF
Hendrik Lösch
 
An Introduction to Ruby On Rails
An Introduction to Ruby On RailsAn Introduction to Ruby On Rails
An Introduction to Ruby On Rails
Jonathan Weiss
 
Steinzeit war gestern! Wege der cloud-nativen Evolution
Steinzeit war gestern! Wege der cloud-nativen EvolutionSteinzeit war gestern! Wege der cloud-nativen Evolution
Steinzeit war gestern! Wege der cloud-nativen Evolution
QAware GmbH
 
Sonar - Software Qualitätsmanagement ohne Schmerzen
Sonar - Software Qualitätsmanagement ohne SchmerzenSonar - Software Qualitätsmanagement ohne Schmerzen
Sonar - Software Qualitätsmanagement ohne Schmerzen
openForce Information Technology GesmbH
 
Metaprogrammierung und Reflection
Metaprogrammierung und ReflectionMetaprogrammierung und Reflection
Metaprogrammierung und Reflection
Stefan Marr
 
Net@night asp.net mvc
Net@night asp.net mvcNet@night asp.net mvc
Net@night asp.net mvc
Digicomp Academy AG
 
Agiles Testen - Überblick
Agiles Testen - ÜberblickAgiles Testen - Überblick
Agiles Testen - Überblick
Claudia Haußmann 🦋
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
Sebastian Springer
 
Steinzeit war gestern! Wege der cloud-nativen Evolution
Steinzeit war gestern! Wege der cloud-nativen EvolutionSteinzeit war gestern! Wege der cloud-nativen Evolution
Steinzeit war gestern! Wege der cloud-nativen Evolution
QAware GmbH
 
Mit Domain-driven Design (DDD) nützliche und flexible Software bauen
Mit Domain-driven Design (DDD) nützliche und flexible Software bauenMit Domain-driven Design (DDD) nützliche und flexible Software bauen
Mit Domain-driven Design (DDD) nützliche und flexible Software bauen
Digicomp Academy AG
 
Advanced Refactoring Patterns
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring Patterns
Hendrik Lösch
 

Ähnlich wie Refactoring Rails Applications (20)

Einführung in Ruby On Rails
Einführung in Ruby On RailsEinführung in Ruby On Rails
Einführung in Ruby On Rails
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
 
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
 
SeoDay 2017: Mikroprozesse im SEO
SeoDay 2017: Mikroprozesse im SEOSeoDay 2017: Mikroprozesse im SEO
SeoDay 2017: Mikroprozesse im SEO
 
CDI
CDICDI
CDI
 
Ruby on Rails in a metro session
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro session
 
Software Metrics and Continuous Integration
Software Metrics and Continuous IntegrationSoftware Metrics and Continuous Integration
Software Metrics and Continuous Integration
 
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
ESEconf2011 - Trost Joachim: "Tool supported technical Code and Design Qualit...
 
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
 
MVVM mit WPF
MVVM mit WPFMVVM mit WPF
MVVM mit WPF
 
An Introduction to Ruby On Rails
An Introduction to Ruby On RailsAn Introduction to Ruby On Rails
An Introduction to Ruby On Rails
 
Steinzeit war gestern! Wege der cloud-nativen Evolution
Steinzeit war gestern! Wege der cloud-nativen EvolutionSteinzeit war gestern! Wege der cloud-nativen Evolution
Steinzeit war gestern! Wege der cloud-nativen Evolution
 
Sonar - Software Qualitätsmanagement ohne Schmerzen
Sonar - Software Qualitätsmanagement ohne SchmerzenSonar - Software Qualitätsmanagement ohne Schmerzen
Sonar - Software Qualitätsmanagement ohne Schmerzen
 
Metaprogrammierung und Reflection
Metaprogrammierung und ReflectionMetaprogrammierung und Reflection
Metaprogrammierung und Reflection
 
Net@night asp.net mvc
Net@night asp.net mvcNet@night asp.net mvc
Net@night asp.net mvc
 
Agiles Testen - Überblick
Agiles Testen - ÜberblickAgiles Testen - Überblick
Agiles Testen - Überblick
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
 
Steinzeit war gestern! Wege der cloud-nativen Evolution
Steinzeit war gestern! Wege der cloud-nativen EvolutionSteinzeit war gestern! Wege der cloud-nativen Evolution
Steinzeit war gestern! Wege der cloud-nativen Evolution
 
Mit Domain-driven Design (DDD) nützliche und flexible Software bauen
Mit Domain-driven Design (DDD) nützliche und flexible Software bauenMit Domain-driven Design (DDD) nützliche und flexible Software bauen
Mit Domain-driven Design (DDD) nützliche und flexible Software bauen
 
Advanced Refactoring Patterns
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring Patterns
 

Mehr von Jonathan Weiss

Docker on AWS OpsWorks
Docker on AWS OpsWorksDocker on AWS OpsWorks
Docker on AWS OpsWorks
Jonathan Weiss
 
ChefConf 2014 - AWS OpsWorks Under The Hood
ChefConf 2014 - AWS OpsWorks Under The HoodChefConf 2014 - AWS OpsWorks Under The Hood
ChefConf 2014 - AWS OpsWorks Under The Hood
Jonathan Weiss
 
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
Jonathan Weiss
 
DevOpsDays Amsterdam - Observations in the cloud
DevOpsDays Amsterdam - Observations in the cloudDevOpsDays Amsterdam - Observations in the cloud
DevOpsDays Amsterdam - Observations in the cloud
Jonathan Weiss
 
Amazon SWF and Gordon
Amazon SWF and GordonAmazon SWF and Gordon
Amazon SWF and Gordon
Jonathan Weiss
 
Introduction to Backbone.js
Introduction to Backbone.jsIntroduction to Backbone.js
Introduction to Backbone.js
Jonathan Weiss
 
Scalarium and CouchDB
Scalarium and CouchDBScalarium and CouchDB
Scalarium and CouchDB
Jonathan Weiss
 
Build your own clouds with Chef and MCollective
Build your own clouds with Chef and MCollectiveBuild your own clouds with Chef and MCollective
Build your own clouds with Chef and MCollective
Jonathan Weiss
 
NoSQL - Motivation and Overview
NoSQL - Motivation and OverviewNoSQL - Motivation and Overview
NoSQL - Motivation and Overview
Jonathan Weiss
 
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDBNoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
Jonathan Weiss
 
Running on Amazon EC2
Running on Amazon EC2Running on Amazon EC2
Running on Amazon EC2
Jonathan Weiss
 
Amazon EC2 in der Praxis
Amazon EC2 in der PraxisAmazon EC2 in der Praxis
Amazon EC2 in der Praxis
Jonathan Weiss
 
Infrastructure Automation with Chef
Infrastructure Automation with ChefInfrastructure Automation with Chef
Infrastructure Automation with Chef
Jonathan Weiss
 
Rails in the Cloud
Rails in the CloudRails in the Cloud
Rails in the Cloud
Jonathan Weiss
 
EventMachine
EventMachineEventMachine
EventMachine
Jonathan Weiss
 
CouchDB on Rails
CouchDB on RailsCouchDB on Rails
CouchDB on Rails
Jonathan Weiss
 
Rails in the Cloud - Experiences from running on EC2
Rails in the Cloud - Experiences from running on EC2Rails in the Cloud - Experiences from running on EC2
Rails in the Cloud - Experiences from running on EC2
Jonathan Weiss
 
CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - RailsWayCon 2010CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - RailsWayCon 2010
Jonathan Weiss
 
CouchDB on Rails - FrozenRails 2010
CouchDB on Rails - FrozenRails 2010CouchDB on Rails - FrozenRails 2010
CouchDB on Rails - FrozenRails 2010
Jonathan Weiss
 
NoSQL - Post-Relational Databases - BarCamp Ruhr3
NoSQL - Post-Relational Databases - BarCamp Ruhr3NoSQL - Post-Relational Databases - BarCamp Ruhr3
NoSQL - Post-Relational Databases - BarCamp Ruhr3
Jonathan Weiss
 

Mehr von Jonathan Weiss (20)

Docker on AWS OpsWorks
Docker on AWS OpsWorksDocker on AWS OpsWorks
Docker on AWS OpsWorks
 
ChefConf 2014 - AWS OpsWorks Under The Hood
ChefConf 2014 - AWS OpsWorks Under The HoodChefConf 2014 - AWS OpsWorks Under The Hood
ChefConf 2014 - AWS OpsWorks Under The Hood
 
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
AWS OpsWorks & Chef at the Hamburg Chef User Group 2014
 
DevOpsDays Amsterdam - Observations in the cloud
DevOpsDays Amsterdam - Observations in the cloudDevOpsDays Amsterdam - Observations in the cloud
DevOpsDays Amsterdam - Observations in the cloud
 
Amazon SWF and Gordon
Amazon SWF and GordonAmazon SWF and Gordon
Amazon SWF and Gordon
 
Introduction to Backbone.js
Introduction to Backbone.jsIntroduction to Backbone.js
Introduction to Backbone.js
 
Scalarium and CouchDB
Scalarium and CouchDBScalarium and CouchDB
Scalarium and CouchDB
 
Build your own clouds with Chef and MCollective
Build your own clouds with Chef and MCollectiveBuild your own clouds with Chef and MCollective
Build your own clouds with Chef and MCollective
 
NoSQL - Motivation and Overview
NoSQL - Motivation and OverviewNoSQL - Motivation and Overview
NoSQL - Motivation and Overview
 
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDBNoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
 
Running on Amazon EC2
Running on Amazon EC2Running on Amazon EC2
Running on Amazon EC2
 
Amazon EC2 in der Praxis
Amazon EC2 in der PraxisAmazon EC2 in der Praxis
Amazon EC2 in der Praxis
 
Infrastructure Automation with Chef
Infrastructure Automation with ChefInfrastructure Automation with Chef
Infrastructure Automation with Chef
 
Rails in the Cloud
Rails in the CloudRails in the Cloud
Rails in the Cloud
 
EventMachine
EventMachineEventMachine
EventMachine
 
CouchDB on Rails
CouchDB on RailsCouchDB on Rails
CouchDB on Rails
 
Rails in the Cloud - Experiences from running on EC2
Rails in the Cloud - Experiences from running on EC2Rails in the Cloud - Experiences from running on EC2
Rails in the Cloud - Experiences from running on EC2
 
CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - RailsWayCon 2010CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - RailsWayCon 2010
 
CouchDB on Rails - FrozenRails 2010
CouchDB on Rails - FrozenRails 2010CouchDB on Rails - FrozenRails 2010
CouchDB on Rails - FrozenRails 2010
 
NoSQL - Post-Relational Databases - BarCamp Ruhr3
NoSQL - Post-Relational Databases - BarCamp Ruhr3NoSQL - Post-Relational Databases - BarCamp Ruhr3
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