Tip #28 - Separate the things that change from the things that stay the same
Sat Jul 12 18:21:30 -0700 2008
When you are coding, you should try to separate out the things that change from the things that stay the same. This isn’t my idea, but it is worth tip’n here as I just saw a really good, simple example of this…
I first read about this concept in learning about Design Patterns. Then I also read it in Design Patterns in Ruby by Russ Olsen (good book by the way).
The basic concept is that if you can spot the few lines of code in your design that could change and move these out to a separate part of your code base, when a change comes along, you just have to change one small part of your app and you are done. You don’t have to dive through lots of classes fixing and correcting code everywhere to implement the change.
I recently ran into a good example of this, it is the Active Record Extensions by Zach Dennis
I use PostgreSQL, Zach’s Active Record extensions worked out of the box with PostgreSQL, but in the inefficient fail-safe manner, that is, it did bulk inserts by making one complete insert statement per row, which is per the SQL standard.
For MySQL, he had implemented the multiple insert method in SQL, which allows you to write on “INSERT INTO…” and give it an insert array of (in my case) 1000 rows. This cuts down on data transfer between the client and server. Especially when you are inserting a few hundred thousand rows.
I knew PostgreSQL also supported this, so I dove into the code base to find a way to implement.
Happily, I found that Zach had followed the above rule to the letter. To implement this, I had to modify one line in one file (to include a module) and copy about 20 lines into another file (the MySQL versions) and modify a few of those lines to suit PostgreSQL and I was done!
This was a good piece of code, a good example of the above and worth looking at for a Ruby on Rails intermediate type who wants to find out more about plugins and extending ActiveRecord.
Mikel
Latest posts
- How to use Mail / ActionMailer 3 with GMail SMTP
- Put your mailer where the action is!
- Why Force a Choice?
- How to make an RSS feed in Rails
- Rails 3 Routing with Rack
- Bundle me some Rails
- Helping out in Haiti
- Watch your self
- Is Rails 3.0 a Game Changer?
- Where did the scripts go?
- validates :rails_3, :awesome => true
- New Rails Version 3.0 Guides Online
- New ActionMailer API in Rails 3.0
- Mail gem version 2 released
- How to rename a Rails 3 Application
- Rails 3.0 Examples
- DECCA Driving Day
- Mail now merged into ActionMailer
- Tip #29 - Stop a Mongrel (or any) Service in Windows
- Ruby on Rails Tips Page
- Monitoring a DAHDI or Zaptel Channel
- Mail gets some compliments!
- Rails Unit Tests: uninitialized constant error
- New Mail gem released
- Mail and Bounced Emails
- Mail, TMail, The Future of Ruby Email Handling
- Custom Music on Hold for Asterisk
- Always getting an invalid authenticity token error
- Windows ipconfig does not show anything
- FreeBSD rc scripts
- How to monitor a logged in professional
- TMail Moves to GIT
- Funny...
- How to reset a sequence with PostgreSQL
- OpenBSD RAID and Temp Sensors on HP Proliant DL 360 and 380 Series
- Terminator - Timeout without Mercy
- Fortune...
- Examples of Behaviour Spec'n
- Tip #27 - Spec a Behaviour, Not an Implementation
- Tip #26 - Start Small
- Tip #25 - Logging is your friend...
- Tip #24 - Being clever in specs is for dummies
- Tip #23 - Know your fundamentals
- Convert Visual Basic / Microsoft Long Integer Color Values to CSS RGB Format
- It's amazing what you find...
- RSpec Story xhr problem
- Tip #22 - How to ask a question about Rails
- Tip #21 - Developer Info On Every Page
- And now for something completely different...
Latest comments
Categories
Tag Cloud
AJAX ARGH! ActiveRecord Ajax Apache Apple Asterisk Australia Copy Database Development Feedburner Gem server Google Human Rights Javascript L. Ron Hubbard MS SQL Server MacOSX Mail Mephisto Not Programming OpenBSD Opensource Performance Personal Integrity PostgreSQL Programming Prototype Puzzle RDoc REST RESTful Rails RSPec RSpec Rails Rails Tips Rspec Ruby Ruby on Rails Ruby on Rails Tips Ruby on rails Tips SQL SQLServer SVN Scientologist Scientology Site Stats Soekris Soekris net5501 TMail Textmate Tips Windows World about mikel anti drug apache contributing daemon documentation drugs illustrator javascript lambda mail mephisto newspapers nitro open source opensource photoshop productivity programming railscasts rspec ruby ruby on rails rubyforge scientology seo sitemap sqlserver tips tmail tom cruise unix tricks vector graphicsArchives
- November 2009 (1)
- October 2009 (2)
- September 2009 (2)
- August 2009 (0)
- July 2009 (1)
- June 2009 (0)
- May 2009 (1)
- April 2009 (0)
- March 2009 (0)
- February 2009 (0)
- January 2009 (2)
- December 2008 (0)
- November 2008 (5)
- October 2008 (0)
- September 2008 (1)
- August 2008 (0)
- July 2008 (2)
- June 2008 (13)
- May 2008 (7)
- April 2008 (18)
- March 2008 (8)
- February 2008 (5)
- January 2008 (7)
- December 2007 (20)
- November 2007 (22)

Leave a Reply