Slide 1

Slide 1 text

Saturday, April 6, 13

Slide 2

Slide 2 text

The end to my last talk Saturday, April 6, 13

Slide 3

Slide 3 text

All gems start with a namespace Saturday, April 6, 13

Slide 4

Slide 4 text

No Rails app starts with a namespace Saturday, April 6, 13

Slide 5

Slide 5 text

Rails Gems Saturday, April 6, 13

Slide 6

Slide 6 text

(a gorgeous and infinite nothingness) Rails Gems Saturday, April 6, 13

Slide 7

Slide 7 text

(a gorgeous and infinite nothingness with all the bells and whistles of active*) Rails Gems Saturday, April 6, 13

Slide 8

Slide 8 text

Try this! Namespace everything in your next app Saturday, April 6, 13

Slide 9

Slide 9 text

Give yourself a box so you can start thinking outside of it Saturday, April 6, 13

Slide 10

Slide 10 text

Component-based Ruby and Rails Architectures Stephan Hagemann Saturday, April 6, 13

Slide 11

Slide 11 text

Saturday, April 6, 13

Slide 12

Slide 12 text

Let’s talk about large apps Saturday, April 6, 13

Slide 13

Slide 13 text

Never build large apps. Saturday, April 6, 13

Slide 14

Slide 14 text

Saturday, April 6, 13

Slide 15

Slide 15 text

Your app wants to kill you! Sandi Metz Saturday, April 6, 13

Slide 16

Slide 16 text

HTTP://WWW.FLICKRIVER.COM/PHOTOS/REXY85/263649949/ Saturday, April 6, 13

Slide 17

Slide 17 text

HTTP://WWW.PBASE.COM/SIGMADSLR/IMAGE/34745521 Saturday, April 6, 13

Slide 18

Slide 18 text

HTTP://WWW.PELAPAPAS.COM.MX/HTMLS/GENTE_ANIMALES.HTML Saturday, April 6, 13

Slide 19

Slide 19 text

The secret to building large apps is never build large apps. Justin Meyer Saturday, April 6, 13

Slide 20

Slide 20 text

The secret to building large apps is never build large apps. Break your applications into small pieces. Then, assemble those testable, bite- sized pieces into your big application Justin Meyer Saturday, April 6, 13

Slide 21

Slide 21 text

But how? Saturday, April 6, 13

Slide 22

Slide 22 text

github.com/shageman/the_next_big_thing Saturday, April 6, 13

Slide 23

Slide 23 text

Saturday, April 6, 13

Slide 24

Slide 24 text

5 looser coupling 3 gems 1 one app 4 engines 8 HTTP SOA 2 modules 7 eco-system 6 services Saturday, April 6, 13

Slide 25

Slide 25 text

1 The one app Saturday, April 6, 13

Slide 26

Slide 26 text

Remember! a gorgeous and infinite nothingness with all the bells and whistles of active* Saturday, April 6, 13

Slide 27

Slide 27 text

HTTP://WWW.FLICKR.COM/PHOTOS/WIDNR/6589525327/ Saturday, April 6, 13

Slide 28

Slide 28 text

ANNOYANCE ENTRY STRUCTURE Saturday, April 6, 13

Slide 29

Slide 29 text

2 The modularized app Saturday, April 6, 13

Slide 30

Slide 30 text

+ A higher level structure Saturday, April 6, 13

Slide 31

Slide 31 text

HTTP://WWW.FLICKR.COM/PHOTOS/WIDNR/6589525327/ Saturday, April 6, 13

Slide 32

Slide 32 text

HTTP://EECUE.COM/P/31426/METAL-RECYCLING-YARD.HTML Saturday, April 6, 13

Slide 33

Slide 33 text

ANNOYANCE EMAIL SIGNUP STRUCTURE Saturday, April 6, 13

Slide 34

Slide 34 text

3 The gem component app Saturday, April 6, 13

Slide 35

Slide 35 text

+ Provably independent tests Saturday, April 6, 13

Slide 36

Slide 36 text

Choose modules that tell the story of the system and contain a cohesive set of concepts Eric Evans Saturday, April 6, 13

Slide 37

Slide 37 text

Saturday, April 6, 13

Slide 38

Slide 38 text

HTTP://WWW.SMASHINGMAGAZINE.COM/INFORMATION-AND-INSTRUCTIONAL-SIGNS-PART-1/ Saturday, April 6, 13

Slide 39

Slide 39 text

ANNOYANCE EMAIL SIGNUP STRUCTURE Saturday, April 6, 13

Slide 40

Slide 40 text

4 The Rails component app Saturday, April 6, 13

Slide 41

Slide 41 text

+ Provable structure for Rails Saturday, April 6, 13

Slide 42

Slide 42 text

Rails Engines Saturday, April 6, 13

Slide 43

Slide 43 text

Engines are not just for pagination, generic admin, and authentication Saturday, April 6, 13

Slide 44

Slide 44 text

Engines are not just kaminari, generic admin, and authentication Saturday, April 6, 13

Slide 45

Slide 45 text

Engines are not just kaminari, active admin, and authentication Saturday, April 6, 13

Slide 46

Slide 46 text

Engines are not just kaminari, active admin, and devise Saturday, April 6, 13

Slide 47

Slide 47 text

Rails::Engine allows you to wrap a specific Rails application or subset of functionality and share it with other applications or within a larger packaged application. http://edgeapi.rubyonrails.org/classes/ Rails/Engine.html Saturday, April 6, 13

Slide 48

Slide 48 text

EMAIL SIGNUP TEASER STRUCTURE ANNOYANCE Saturday, April 6, 13

Slide 49

Slide 49 text

What code smell did you see? Saturday, April 6, 13

Slide 50

Slide 50 text

Single Responsibility Saturday, April 6, 13

Slide 51

Slide 51 text

5 The loosely-coupled app Saturday, April 6, 13

Slide 52

Slide 52 text

+ Clearer responsibilities Saturday, April 6, 13

Slide 53

Slide 53 text

EMAIL SIGNUP TEASER STRUCTURE ANNOYANCE EVENT COUNTER Saturday, April 6, 13

Slide 54

Slide 54 text

6 The service-oriented app Saturday, April 6, 13

Slide 55

Slide 55 text

+ Reduced surface area Saturday, April 6, 13

Slide 56

Slide 56 text

588 194 LOGGER::COUNT EVENTCOUNTER::*.METHODS.COUNT LOGGER 361 115 Saturday, April 6, 13

Slide 57

Slide 57 text

588 194 LOGGER::COUNT EVENTCOUNTER::*.METHODS.COUNT LOGGER 361 115 - OBJECT.METHODS LOGGER::COUNT LOGGER 394 0 247 1 Saturday, April 6, 13

Slide 58

Slide 58 text

EMAIL SIGNUP TEASER STRUCTURE ANNOYANCE EVENT COUNTER Saturday, April 6, 13

Slide 59

Slide 59 text

7 The eco-system app Saturday, April 6, 13

Slide 60

Slide 60 text

gem build event_counter.. Saturday, April 6, 13

Slide 61

Slide 61 text

gem push event_counter.. Saturday, April 6, 13

Slide 62

Slide 62 text

Saturday, April 6, 13

Slide 63

Slide 63 text

EMAIL SIGNUP TEASER STRUCTURE ANNOYANCE EVENT COUNTER Saturday, April 6, 13

Slide 64

Slide 64 text

8 The HTTP SOA app Saturday, April 6, 13

Slide 65

Slide 65 text

Saturday, April 6, 13

Slide 66

Slide 66 text

STRUCTURE EMAIL SIGNUP TEASER ANNOYANCE EVENT COUNTER Saturday, April 6, 13

Slide 67

Slide 67 text

Saturday, April 6, 13

Slide 68

Slide 68 text

5 looser coupling 3 gems 1 one app 4 engines 8 HTTP SOA 2 modules 7 eco-system 6 services Saturday, April 6, 13

Slide 69

Slide 69 text

Saturday, April 6, 13

Slide 70

Slide 70 text

Saturday, April 6, 13

Slide 71

Slide 71 text

5 looser coupling 3 gems 1 one app 4 engines 8 HTTP SOA 2 modules 7 eco-system 6 services Saturday, April 6, 13

Slide 72

Slide 72 text

Thanks! Stephan Hagemann @shageman [email protected] Saturday, April 6, 13