×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Exploding Rails
Slide 2
Slide 2 text
Rails: “Ge2ng started is easy” True / False?
Slide 3
Slide 3 text
Rails: “Ge2ng started is easy” True
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
Rails: “Applica=on maintenance is a cinch.” True / False?
Slide 6
Slide 6 text
No content
Slide 7
Slide 7 text
Rails: “Applica=on maintenance is a cinch.” False
Slide 8
Slide 8 text
Ge2ng started is a one +me cost. Maintenance is forever.
Slide 9
Slide 9 text
Ac=ve Record is (mostly) to blame.
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
“Look at all the things I’m not doing.” “Provide sharp knives.”
Slide 13
Slide 13 text
Causes an N+1 query
Slide 14
Slide 14 text
Mixes database querying and data manipula=on
Slide 15
Slide 15 text
DB Calls Count: 3
Slide 16
Slide 16 text
“I’ll just stub those things out!”
Slide 17
Slide 17 text
No content
Slide 18
Slide 18 text
Fixes the N+1 issue
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
Causes an N+1 query, also
Slide 21
Slide 21 text
SQL Query A view New in Rails 5.2 Query logging
Slide 22
Slide 22 text
Ac=ve Record is an an+-paBern.
Slide 23
Slide 23 text
Causes an N+1 query, also
Slide 24
Slide 24 text
No content
Slide 25
Slide 25 text
Ac=ve Record violates SRP You, looking on in despair
Slide 26
Slide 26 text
Ac=ve Record =es your applica=on to your database.
Slide 27
Slide 27 text
Rails applica=ons know too much about their underlying database. (because Ac=ve Record makes it easy)
Slide 28
Slide 28 text
Rails has barely evolved.
Slide 29
Slide 29 text
Rails 1.2 Rails 5.2 app /controllers /helpers /models /views app /controllers /helpers /mailers /models /views
Slide 30
Slide 30 text
Does it go in the view? Does it go in the controller? Put it in the model No No
Slide 31
Slide 31 text
…
Slide 32
Slide 32 text
Have we learned nothing?
Slide 33
Slide 33 text
Rails as a delivery mechanism.
Slide 34
Slide 34 text
A browser Rails App Repos Database Rails Ruby PostgreSQL (duh) POROs Knows nothing about
Slide 35
Slide 35 text
Makes a request to… A browser Rails App Repos Database POROs
Slide 36
Slide 36 text
A browser Rails App Repos Database POROs Makes a request to…
Slide 37
Slide 37 text
A browser Rails App Repos Database POROs Makes a request to…
Slide 38
Slide 38 text
A browser Rails App Repos Database POROs Returns records
Slide 39
Slide 39 text
Returns en++es A browser Rails App Repos Database POROs
Slide 40
Slide 40 text
Returns data A browser Rails App Repos Database POROs
Slide 41
Slide 41 text
No content
Slide 42
Slide 42 text
An En=ty
Slide 43
Slide 43 text
Projects::Project.new # => 12 methods My Rails App
Slide 44
Slide 44 text
Project.new # => 296 methods A Vanilla Rails App callbacks, dirty tracking, validations, etc.
Slide 45
Slide 45 text
DB Calls Count: 0
Slide 46
Slide 46 text
My Rails App
Slide 47
Slide 47 text
Regular Rails App
Slide 48
Slide 48 text
My Rails App
Slide 49
Slide 49 text
Regular Rails App
Slide 50
Slide 50 text
How did I get to this magical utopia?
Slide 51
Slide 51 text
ROM! http://rom-rb.org/
Slide 52
Slide 52 text
Exploded Rails app /controllers /helpers /models /relations /repositories /schemas /transactions /views Regular Rails 5.2 app /controllers /helpers /mailers /models /views
Slide 53
Slide 53 text
Repositories are the API between rela=ons and your applica=on.
Slide 54
Slide 54 text
Rela=ons are the API between repositories and your database.
Slide 55
Slide 55 text
Schemas validate data for your applica=on.
Slide 56
Slide 56 text
Transac=ons wrap complicated ac=ons into sensible steps.
Slide 57
Slide 57 text
A cleaner architecture.
Slide 58
Slide 58 text
Rails controllers know nothing about the database. (They only know about the repositories)
Slide 59
Slide 59 text
Rails views are unable to perform DB queries. (They accept what is given to them)
Slide 60
Slide 60 text
Rails models represent data and do nothing else. (No callbacks. No validation.)
Slide 61
Slide 61 text
Rails as a simple delivery mechanism.
Slide 62
Slide 62 text
I could go on…
Slide 63
Slide 63 text
Or you could read my app’s code: bit.ly/twist-v2 Uses Hanami + React
Slide 64
Slide 64 text
Or you could read my new book: bit.ly/exploding-rails $10 off Covers using rom-rb and dry-rb with Rails