Un nou meetup Constanța Developers a avut loc pe 6 februarie 2024 la Club Doors (jos, la subsol).
Meetup: https://www.meetup.com/constanta-developers/
Slack: https://join.slack.com/t/constanta-developers/shared_invite/zt-1lwgww2fr-4zG3UPsyDd2fBseN5XcVfA
Facebook: https://www.facebook.com/groups/1630405593875560/
Youtube: https://www.youtube.com/channel/UCo4fsNpmfWouchKBYVMrodA
Instagram: https://www.instagram.com/ctadevs/
WordPress: https://constantadevelopers.wordpress.com/
Slideshare: https://www.slideshare.net/ConstantaDevelopers
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
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
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
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
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
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
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
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
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
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