, 7 tweets, 3 min read
My Authors
Read all threads
There is another type of #Ruby object design that I talk less: data objects.

#OOP

1/
Their main role is to wrap data and expose logic on top of it.
Think of HTTP params, Entities, Presenters. It makes no sense for them to be "callable objects", as they don't perform an operation.

They are most of the time the input/output of an operation. Params are input coming from Rack env, Entities the returning value from/to the db.
Why would we wrap data into an object instead of using Ruby primitives? Because we want to expose logic that is meaningful to our domain, where Ruby primitives are general purpose tools.

E.g. Params: you don't want to use Hash for that.
Read @tenderlove tenderlovemaking.com/2014/06/02/yag…
Data objects are a great solution to overcome Primitive Obsession code smell.

blog.dnsimple.com/2016/10/overco…

blog.dnsimple.com/2016/11/purpos…
What you should be very careful is how those objects (mainly HTTP Params and Entities) are serialized.

Serialization is an important topic to make sure your system can be compatible outside of its boundaries: eg. send them to Sidekiq or Kafka which only understand primitive data
Luckily #Ruby offers powerful protocols to make your data objects to play well outside of the boundaries.

blog.dnsimple.com/2016/12/ruby-c…

blog.dnsimple.com/2017/01/ruby-c…
Missing some Tweet in this thread? You can try to force a refresh.

Enjoying this thread?

Keep Current with Luca Guidi

Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!