Slide 1

Slide 1 text

DCI

Slide 2

Slide 2 text

Hello There! I’m @patricksroberts. I work at @iorahealth. I co-organize @bostonrb.

Slide 3

Slide 3 text

DATA CONTEXT INTERACTION

Slide 4

Slide 4 text

DCI is a strategy to separate what your system does from what your system is.

Slide 5

Slide 5 text

The Old and Busted Way

Slide 6

Slide 6 text

# app/models/user.rb class User < ActiveRecord::Base validates_presence_of :twitter_handle def tweet TwitterWrangler.add_to_queue twitter_handle, twitter message end private def twitter_message “Today my BMI is #{body_mass_index} and I’m #{percent_of_body_mass_index_goal} from my goal of #{body_mass_index_goal}!” end end

Slide 7

Slide 7 text

THE NEW HOTNESS

Slide 8

Slide 8 text

DATA

Slide 9

Slide 9 text

# app/models/user.rb class User < ActiveRecord::Base validates_presence_of :twitter_handle end

Slide 10

Slide 10 text

ROLE

Slide 11

Slide 11 text

# app/roles/twit_user.rb module TwitUser def twitter_message “Today my BMI is #{body_mass_index} and I’m #{percent_of_body_mass_index_goal} from my goal of #{body_mass_index_goal}!” end end

Slide 12

Slide 12 text

CONTEXT

Slide 13

Slide 13 text

# app/contexts/bmi_update_tweet.rb class BmiUpdateTweet attr_reader :user def initialize(user) @user = user @user.extend TwitUser end def call TwitterWrangler.add_to_queue @user.twitter_handle, @user.twitter_message end end

Slide 14

Slide 14 text

INTERACTION

Slide 15

Slide 15 text

# app/controllers/tweets_controller.rb class TweetsController < ApplicationController def update user = User.find(params[:id]) BmiUpdateTweet.new(user).call respond_with :ok end end