I’ve changed my mind.
First, let me step back.
For the last few years, I’ve been one of a (growing) minority of folks that has been promoting the idea of going against the grain, and not building Rails apps “The Rails Way”. In fact, I even have an unpublished draft on my blog dated June 9, 2011 called “The Downfall of Rails”. I was pretty sure Rails, as we knew it, was totally over. I haven’t been a proponent of DCI, but I have been a proponent of things like mustache, Isolate, Jammit, and a number of competing (and, I still stand by this, better) technologies. I have been one of those people who might lecture you about service oriented design, how ridiculous bundler is, and how rails isn’t actually OOP and a whole number of anti-Rails things like that if you give me the chance.
Here’s the thing. It’s actually not that helpful.
A good number of folks that read that will say “But we have to have the conversation, it has to start somewhere.” Maybe. But I feel like we’ve had it (many times, the first one being the long nightmare merb merge), and it’s just not worth having over and over again.
There are two points here, that I don’t think can be debated:
- DHH doesn’t care.
- We all chose Rails because it’s opinionated.
Those are, for better or worse, facts. And if DHH just doesn’t care, and if we choose Rails *because* we wanted opinionated software, these conversations just really aren’t that helpful.
So what am I actually suggesting here? Stop talking about “Proper OOP” and DCI (in rails) and “Objects on Rails” and whatever else falls in this category.
Here’s the deal, if you want to do “Proper OOP” (not that anyone can even agree on what that is), do it. There are frameworks and tools out there. Build something “proper” on Rack. Use webmachine. Webmachine is amazing. It’s a totally different way to think about web software and it’s pretty close to “proper oop” to me. And it’s not trying to shoe horn some idea you got on top of Rails.
But if you’re going to be a Rails Developer™, lean into it. Lets bring the conversation back to what the “Rails way” to do things is and lets grow those ideas. And lets talk about how to move Rails, keeping it’s conventions and opinions, forward. And, importantly, lets just agree that it isn’t DCI and “Proper OOP”. Because that isn’t the future of Rails. That might be the future of Ruby web apps, and that’s great, I hope it is, but it’s not the future of Rails.
Footnote: I’m not against SOLID or clean code or learning from smalltalk or listening to the great neckbeards of the past. Lets do all those things. Lets all be better programmers. I don’t think DCI and it’s ilk is any of those things.