24. @skwp @reverbdotcom #wcr14
Product
400 LOC
~150 LOC non-ActiveRecord
Churn: 49 changes this year"
Order
333 LOC
~200 LOC non-ActiveRecord
Churn: 36 changes this year
User
338 LOC
~200 LOC non-ActiveRecord
Churn: 29 changes this year
28. @skwp @reverbdotcom #wcr14
Don’t put
different rates
of change
together"
Kent Beck - Smalltalk Best Practice Patterns
(see also: Single Responsibility Principle)
29. @skwp @reverbdotcom #wcr14
Don’t put
different rates
of change
together"
Kent Beck - Smalltalk Best Practice Patterns
Data Model
Business Logic
30. @skwp @reverbdotcom #wcr14
Separate
what the system is "
from what the
system does"
James Copelien & Trygve Reenskaug
(Data, Context, Interaction)
38. @skwp @reverbdotcom #wcr14
“Active Record is a good choice
for domain logic that isn't too
complex, such as creates, reads,
updates, and deletes”
Martin Fowler
92. @skwp @reverbdotcom #wcr14
Global listeners for cross-cutting concerns
without littering code
Wisper::GlobalListeners.add(Reverb::Listeners::AnalyticsListener.new)"