SlideShare a Scribd company logo
1 of 43
Download to read offline
De ce Ruby on Rails este o
alegere buna in 2024
1
Eu sunt Gabi
- Absolvent al Facultatii de Calculatoare - Politehnica Bucuresti
- Software engineer de 14 ani, majoritatea petrecuti in ruby world
- In prezent software engineer la StayFi
Ma gasiti la voicu_gabriel@ymail.com
Hello!
2
Voi ce limbaje folositi?
?
3
Despre ruby
Limbaj de programare dinamic, intuitiv și orientat pe obiecte, lansat în
1995 de Yukihiro "Matz" Matsumoto
Caracteristici
◉ In ruby totul este un obiect
◉ Sintaxa simpla: Cod aproape de limbajul natural, ușor de înțeles și scris
◉ Predictibilitate: Proiectat pentru a minimiza surprizele (e.g. array.first)
◉ Blocuri: Functii anonime care pot fi trimise ca parametrii
◉ Iteratori: Faciliteaza manipularea facila a colectiilor
◉ Metaprogramare: Permite scrierea de cod care genereaza cod in timpul executiei
◉ Plugin-urile in ruby se numesc gems
4
Exemplu de clasa in ruby
5
Metaprogramare in ruby
6
Metaprogramare - Monkey patching
7
Despre rails
◉ Ruby on Rails, adesea simplificat ca Rails, este un framework de
dezvoltare web bazat pe pattern-ul MVC
◉ A fost creat de David Heinemeier Hansson (DHH) și lansat în 2004 ca
urmare a dezvoltarii Basecamp
◉ Rails este cunoscut pentru adoptarea filozofiei "Convention over
Configuration" (Convenție in loc de Configurare) si a principiului DRY
(Don't Repeat Yourself), care încurajează reutilizarea codului și
reduce redundanta
8
Companii care folosesc rails
9
Framework-uri inspirate din rails
10
Ce apreciati la
limbajele /
framework-urile
preferate?
?
11
De ce rails ?
◉ Productivitate & Eficienta
○ Conventie in loc de configurare
○ Dezvoltare rapida
○ Dezvoltare RESTful
○ DRY (Don't Repeat Yourself)
○ KISS (Keep It Simple Stupid)
○ MVC (Model View Controller)
○ Accent puternic pe testare
○ Majestic Monolith
◉ Comunitate
○ Exista gems (plugin-uri) pentru orice problema, iar comunitatea este implicata in mentenanta lor
◉ Fun
○ Optimized for developer happiness
◉ Scalabilitate
◉ Maturitate si stabilitate
12
Use the right tool for the job
13
Unde este potrivit rails?
◉ Aplicatii web custom
○ Site-uri de prezentare
○ Publicatii online
○ Retele sociale
◉ Aplicatii de tip SaaS
◉ Proiecte e-commerce custom
◉ Aplicatii native hibride
14
Unde nu este potrivit rails?
◉ Daca aplicatia nu are o componenta web
◉ Ca baza a unei aplicatii enterprise
◉ (Discutabil) Blog
◉ (Discutabil) Aplicatii realtime cu un trafic ridicat
◉ (Discutabil) Magazin online care poate beneficia de
solutii e-commerce existente
15
16
M(odel) - V(iew) - C(ontroller)
17
Flow-ul unui request
18
Model - Active Record
◉ Mapeaza in mod automat
○ tabele cu clase
○ randuri din tabele cu obiecte
○ coloane cu atributele obiectului
◉ Minimizeaza nevoia de a scriere
query-uri in SQL
◉ Se ocupa de validarile atributelor
◉ Se ocupa de relatia intre modele
19
Dezvoltare RESTful
20
Conventie in loc de configurare - structura proiectului
◉ app: logica aplicatiei
○ assets: CSS, imagini
○ channels: canale pentru
websockets
○ controllers
○ helpers: metode folosite in
view-uri
○ javascript
○ jobs: background jobs
○ mailers
○ models
○ views
21
◉ bin: script-uri folosite pentru
rularea aplicatiei
◉ config: configurari precum
rutele, conexiunea bazei de
date, etc.
◉ db: migratiile baze de date
◉ lib: plugin-uri third party
◉ log: log-urile aplicatiei
◉ public: orice fisier ce va
putea fi accesat
◉ storage
Conventie in loc de configurare
22
DRY (Don’t Repeat Yourself)
Migratii ale bazei de date
permit replicarea bazei de date
in orice mediu
23
ActiveRecord (ORM)
elimina necesitatea scrierii query-urilor
repetitive
DRY (Don’t Repeat Yourself)
24
Modules & Concerns
permit reutilizarea codului in
cadrul proiectului
View Partials
permit reutilizarea template-urilor
Dezvoltare rapida (scaffolding)
25
KISS (Keep It Simple Stupid)
Logica redundanta este abstractizata, lasand
dezvoltatorul sa se ocupe doar de logica business
26
Testare automata
27
Behavioral Driven-Development Testing
Unit Testing
Comunitate (ruby toolbox)
28
29
Service Objects (Command Pattern) sau
PORO (Plain old ruby objects)
◉ Fat controllers => BAD
◉ Fat models => BAD
◉ Where is the logic ???
-> Clase simple care au ca scop
rezolvarea unei singure actiuni
30
ActiveJob
Solutie: Abstractizarea comunicarii cu gem-urile
de background jobs 31
Problema: In timpul ciclului de dezvoltare iti dai
seama ca solutia de background job nu este potrivita
ActiveJob
32
Action Cable - Comunicare prin WebSocket
33
De ce rails in 2024?
Situatia curenta in industrie:
◉ Fie la fiecare request, server-ul returneaza tot
HTML-ul
○ Problematic din cauza ca fiecare request inseamna
un refresh intreg de pagina
◉ Fie se implementeaza un SPA pe frontend si un
API pe backend
○ Creste complexitatea proiectului
34
HotWire (HTML Over the Wire)
HotWire
Full server side
rendering
SPA + API
35
Server-ul transmite bucati de HTML prin
AJAX sau WebSockets
HotWire (HTML Over the Wire)
Turbo
Componenta
principala, se ocupa
de comunicarea
Client - Server
Stimulus
Un mini framework
de javascript pentru
situatiile in care avem
mici modificari de
interfata dinamice
Strada
Un set de biblioteci
pentru iOS, Android
si web ce creeaza o
punte de comunicare
intre componente
native si aplicatia
web
36
Turbo
◉ Turbo Drive
○ Urmareste click-urile pe link-uri si submit-urile de
formulare, le executa in background si updateaza fie
doar body-ul, fie o parte din body
◉ Turbo Frames
○ Ofera posibilitatea de a updata doar o portiune de
HTML
◉ Turbo Streams
○ Reprezinta o modalitate prin care server-ul poate
instrui clientul cum sa se updateze
37
Turbo - Turbo Drive & Turbo Frames
38
In felul acesta, link-ul de edit pastreaza dublu rol:
● Daca este chemata prin Turbo, va inlocui doar partial continutul
● Daca este chemata separat, se va comporta ca o pagina de sine statatoare
Turbo - Turbo Streams
39
Turbo
40
◉ Server-ul poate transmite HTML-ul atat prin
HTTP cat si prin WebSockets
◉ Cand un obiect din baza de date se modifica,
putem instrui ActiveRecord sa updateze toti
clientii care asculta prin websockets
Stimulus.js
41
Turbo - Strada
42
Majestic Monolith
43
ActiveRecord Action Controller Action View
ActiveJob Action Cable
ActiveStorage Hotwire Strada

More Related Content

Similar to Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, Club Doors)

Alternative Open Source pentru mediul de afaceri-19mar2010
Alternative Open Source pentru mediul de afaceri-19mar2010Alternative Open Source pentru mediul de afaceri-19mar2010
Alternative Open Source pentru mediul de afaceri-19mar2010Agora Group
 
Content Management - Alexandru Lapusan
Content Management - Alexandru LapusanContent Management - Alexandru Lapusan
Content Management - Alexandru LapusanIDG Romania
 
Software_interior_ro.pdf
Software_interior_ro.pdfSoftware_interior_ro.pdf
Software_interior_ro.pdfSamanatiSorin
 
Rad gs cas programatica2012
Rad gs cas programatica2012Rad gs cas programatica2012
Rad gs cas programatica2012Agora Group
 
Medii de dezvoltare node.js npm
Medii de dezvoltare node.js  npmMedii de dezvoltare node.js  npm
Medii de dezvoltare node.js npmDmitrii Stoian
 
Biblioteci JavaScript pentru Ajax.pptx
Biblioteci JavaScript pentru Ajax.pptxBiblioteci JavaScript pentru Ajax.pptx
Biblioteci JavaScript pentru Ajax.pptxCostea112
 
Prezentare generala a platformei Android
Prezentare generala a platformei AndroidPrezentare generala a platformei Android
Prezentare generala a platformei Androidmsg4alex
 
Project Smart - DefCamp 2012
Project Smart  - DefCamp 2012Project Smart  - DefCamp 2012
Project Smart - DefCamp 2012DefCamp
 
Cu codul în "nori"
Cu codul în "nori"Cu codul în "nori"
Cu codul în "nori"Sabin Buraga
 
Introducere in symfony2
Introducere in symfony2Introducere in symfony2
Introducere in symfony2Roman Claudiu
 
48892700 invatam-php
48892700 invatam-php48892700 invatam-php
48892700 invatam-phpdissdiss2005
 
Tecomm2011 mm powerpoint - ppt
Tecomm2011 mm   powerpoint - pptTecomm2011 mm   powerpoint - ppt
Tecomm2011 mm powerpoint - pptLaurentiu Marian
 
Wordcamp 2012 - Wordpress pentru web development
Wordcamp 2012 - Wordpress pentru web developmentWordcamp 2012 - Wordpress pentru web development
Wordcamp 2012 - Wordpress pentru web developmentAndrei Diaconu
 
Microsoft - 13mai2011
Microsoft - 13mai2011Microsoft - 13mai2011
Microsoft - 13mai2011Agora Group
 
Iasi code camp 20 april 2013 designing res tfull webservices and web apis - r...
Iasi code camp 20 april 2013 designing res tfull webservices and web apis - r...Iasi code camp 20 april 2013 designing res tfull webservices and web apis - r...
Iasi code camp 20 april 2013 designing res tfull webservices and web apis - r...Codecamp Romania
 
Webdesign - Supravietuirea intre clienti
Webdesign - Supravietuirea intre clientiWebdesign - Supravietuirea intre clienti
Webdesign - Supravietuirea intre clientimirceabotez
 

Similar to Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, Club Doors) (20)

Alternative Open Source pentru mediul de afaceri-19mar2010
Alternative Open Source pentru mediul de afaceri-19mar2010Alternative Open Source pentru mediul de afaceri-19mar2010
Alternative Open Source pentru mediul de afaceri-19mar2010
 
Content Management - Alexandru Lapusan
Content Management - Alexandru LapusanContent Management - Alexandru Lapusan
Content Management - Alexandru Lapusan
 
XWiki Web Dev
XWiki Web DevXWiki Web Dev
XWiki Web Dev
 
Software_interior_ro.pdf
Software_interior_ro.pdfSoftware_interior_ro.pdf
Software_interior_ro.pdf
 
Rad gs cas programatica2012
Rad gs cas programatica2012Rad gs cas programatica2012
Rad gs cas programatica2012
 
Medii de dezvoltare node.js npm
Medii de dezvoltare node.js  npmMedii de dezvoltare node.js  npm
Medii de dezvoltare node.js npm
 
Biblioteci JavaScript pentru Ajax.pptx
Biblioteci JavaScript pentru Ajax.pptxBiblioteci JavaScript pentru Ajax.pptx
Biblioteci JavaScript pentru Ajax.pptx
 
Prezentare generala a platformei Android
Prezentare generala a platformei AndroidPrezentare generala a platformei Android
Prezentare generala a platformei Android
 
Project Smart - DefCamp 2012
Project Smart  - DefCamp 2012Project Smart  - DefCamp 2012
Project Smart - DefCamp 2012
 
Cu codul în "nori"
Cu codul în "nori"Cu codul în "nori"
Cu codul în "nori"
 
Introducere in symfony2
Introducere in symfony2Introducere in symfony2
Introducere in symfony2
 
Remus Cristian CV
Remus Cristian CVRemus Cristian CV
Remus Cristian CV
 
48892700 invatam-php
48892700 invatam-php48892700 invatam-php
48892700 invatam-php
 
Felicitari personalizate
Felicitari personalizateFelicitari personalizate
Felicitari personalizate
 
Tecomm2011 mm powerpoint - ppt
Tecomm2011 mm   powerpoint - pptTecomm2011 mm   powerpoint - ppt
Tecomm2011 mm powerpoint - ppt
 
Wordcamp 2012 - Wordpress pentru web development
Wordcamp 2012 - Wordpress pentru web developmentWordcamp 2012 - Wordpress pentru web development
Wordcamp 2012 - Wordpress pentru web development
 
Microsoft - 13mai2011
Microsoft - 13mai2011Microsoft - 13mai2011
Microsoft - 13mai2011
 
Iasi code camp 20 april 2013 designing res tfull webservices and web apis - r...
Iasi code camp 20 april 2013 designing res tfull webservices and web apis - r...Iasi code camp 20 april 2013 designing res tfull webservices and web apis - r...
Iasi code camp 20 april 2013 designing res tfull webservices and web apis - r...
 
Webdesign - Supravietuirea intre clienti
Webdesign - Supravietuirea intre clientiWebdesign - Supravietuirea intre clienti
Webdesign - Supravietuirea intre clienti
 
Redis si Resque
Redis si ResqueRedis si Resque
Redis si Resque
 

Gabriel Voicu - De ce Ruby on Rails este o alegere buna in 2024 (2024.02.06, Club Doors)

  • 1. De ce Ruby on Rails este o alegere buna in 2024 1
  • 2. Eu sunt Gabi - Absolvent al Facultatii de Calculatoare - Politehnica Bucuresti - Software engineer de 14 ani, majoritatea petrecuti in ruby world - In prezent software engineer la StayFi Ma gasiti la voicu_gabriel@ymail.com Hello! 2
  • 3. Voi ce limbaje folositi? ? 3
  • 4. Despre ruby Limbaj de programare dinamic, intuitiv și orientat pe obiecte, lansat în 1995 de Yukihiro "Matz" Matsumoto Caracteristici ◉ In ruby totul este un obiect ◉ Sintaxa simpla: Cod aproape de limbajul natural, ușor de înțeles și scris ◉ Predictibilitate: Proiectat pentru a minimiza surprizele (e.g. array.first) ◉ Blocuri: Functii anonime care pot fi trimise ca parametrii ◉ Iteratori: Faciliteaza manipularea facila a colectiilor ◉ Metaprogramare: Permite scrierea de cod care genereaza cod in timpul executiei ◉ Plugin-urile in ruby se numesc gems 4
  • 5. Exemplu de clasa in ruby 5
  • 8. Despre rails ◉ Ruby on Rails, adesea simplificat ca Rails, este un framework de dezvoltare web bazat pe pattern-ul MVC ◉ A fost creat de David Heinemeier Hansson (DHH) și lansat în 2004 ca urmare a dezvoltarii Basecamp ◉ Rails este cunoscut pentru adoptarea filozofiei "Convention over Configuration" (Convenție in loc de Configurare) si a principiului DRY (Don't Repeat Yourself), care încurajează reutilizarea codului și reduce redundanta 8
  • 11. Ce apreciati la limbajele / framework-urile preferate? ? 11
  • 12. De ce rails ? ◉ Productivitate & Eficienta ○ Conventie in loc de configurare ○ Dezvoltare rapida ○ Dezvoltare RESTful ○ DRY (Don't Repeat Yourself) ○ KISS (Keep It Simple Stupid) ○ MVC (Model View Controller) ○ Accent puternic pe testare ○ Majestic Monolith ◉ Comunitate ○ Exista gems (plugin-uri) pentru orice problema, iar comunitatea este implicata in mentenanta lor ◉ Fun ○ Optimized for developer happiness ◉ Scalabilitate ◉ Maturitate si stabilitate 12
  • 13. Use the right tool for the job 13
  • 14. Unde este potrivit rails? ◉ Aplicatii web custom ○ Site-uri de prezentare ○ Publicatii online ○ Retele sociale ◉ Aplicatii de tip SaaS ◉ Proiecte e-commerce custom ◉ Aplicatii native hibride 14
  • 15. Unde nu este potrivit rails? ◉ Daca aplicatia nu are o componenta web ◉ Ca baza a unei aplicatii enterprise ◉ (Discutabil) Blog ◉ (Discutabil) Aplicatii realtime cu un trafic ridicat ◉ (Discutabil) Magazin online care poate beneficia de solutii e-commerce existente 15
  • 16. 16
  • 17. M(odel) - V(iew) - C(ontroller) 17
  • 19. Model - Active Record ◉ Mapeaza in mod automat ○ tabele cu clase ○ randuri din tabele cu obiecte ○ coloane cu atributele obiectului ◉ Minimizeaza nevoia de a scriere query-uri in SQL ◉ Se ocupa de validarile atributelor ◉ Se ocupa de relatia intre modele 19
  • 21. Conventie in loc de configurare - structura proiectului ◉ app: logica aplicatiei ○ assets: CSS, imagini ○ channels: canale pentru websockets ○ controllers ○ helpers: metode folosite in view-uri ○ javascript ○ jobs: background jobs ○ mailers ○ models ○ views 21 ◉ bin: script-uri folosite pentru rularea aplicatiei ◉ config: configurari precum rutele, conexiunea bazei de date, etc. ◉ db: migratiile baze de date ◉ lib: plugin-uri third party ◉ log: log-urile aplicatiei ◉ public: orice fisier ce va putea fi accesat ◉ storage
  • 22. Conventie in loc de configurare 22
  • 23. DRY (Don’t Repeat Yourself) Migratii ale bazei de date permit replicarea bazei de date in orice mediu 23 ActiveRecord (ORM) elimina necesitatea scrierii query-urilor repetitive
  • 24. DRY (Don’t Repeat Yourself) 24 Modules & Concerns permit reutilizarea codului in cadrul proiectului View Partials permit reutilizarea template-urilor
  • 26. KISS (Keep It Simple Stupid) Logica redundanta este abstractizata, lasand dezvoltatorul sa se ocupe doar de logica business 26
  • 29. 29
  • 30. Service Objects (Command Pattern) sau PORO (Plain old ruby objects) ◉ Fat controllers => BAD ◉ Fat models => BAD ◉ Where is the logic ??? -> Clase simple care au ca scop rezolvarea unei singure actiuni 30
  • 31. ActiveJob Solutie: Abstractizarea comunicarii cu gem-urile de background jobs 31 Problema: In timpul ciclului de dezvoltare iti dai seama ca solutia de background job nu este potrivita
  • 33. Action Cable - Comunicare prin WebSocket 33
  • 34. De ce rails in 2024? Situatia curenta in industrie: ◉ Fie la fiecare request, server-ul returneaza tot HTML-ul ○ Problematic din cauza ca fiecare request inseamna un refresh intreg de pagina ◉ Fie se implementeaza un SPA pe frontend si un API pe backend ○ Creste complexitatea proiectului 34
  • 35. HotWire (HTML Over the Wire) HotWire Full server side rendering SPA + API 35 Server-ul transmite bucati de HTML prin AJAX sau WebSockets
  • 36. HotWire (HTML Over the Wire) Turbo Componenta principala, se ocupa de comunicarea Client - Server Stimulus Un mini framework de javascript pentru situatiile in care avem mici modificari de interfata dinamice Strada Un set de biblioteci pentru iOS, Android si web ce creeaza o punte de comunicare intre componente native si aplicatia web 36
  • 37. Turbo ◉ Turbo Drive ○ Urmareste click-urile pe link-uri si submit-urile de formulare, le executa in background si updateaza fie doar body-ul, fie o parte din body ◉ Turbo Frames ○ Ofera posibilitatea de a updata doar o portiune de HTML ◉ Turbo Streams ○ Reprezinta o modalitate prin care server-ul poate instrui clientul cum sa se updateze 37
  • 38. Turbo - Turbo Drive & Turbo Frames 38 In felul acesta, link-ul de edit pastreaza dublu rol: ● Daca este chemata prin Turbo, va inlocui doar partial continutul ● Daca este chemata separat, se va comporta ca o pagina de sine statatoare
  • 39. Turbo - Turbo Streams 39
  • 40. Turbo 40 ◉ Server-ul poate transmite HTML-ul atat prin HTTP cat si prin WebSockets ◉ Cand un obiect din baza de date se modifica, putem instrui ActiveRecord sa updateze toti clientii care asculta prin websockets
  • 43. Majestic Monolith 43 ActiveRecord Action Controller Action View ActiveJob Action Cable ActiveStorage Hotwire Strada