
Ruby on Rails:
Een kritische blik op zeven 'bad practices'

Ruby on Rails is een krachtig Woordenboek · In het kortfull-stackFull-stack beschrijft softwareontwikkeling die zowel de frontend als de backend van een applicatie omvat. De term kan slaan op een developer, een team of een technisch hulpmiddel.Lees meer web application Woordenboek · In het kortframeworkEen framework is een samenhangende basis voor softwareontwikkeling. Het biedt herbruikbare code, een vaste structuur en afspraken voor het bouwen van een applicatie.Lees meer dat bekendstaat om zijn elegante syntax en snelle ontwikkelingsmogelijkheden. In de hoop dat ik, Remco, ze (in ieder geval binnen 10KB) nooit meer tegen ga komen gaf ik een workshop over de 'bad practices' binnen het Rails ecosysteem. Want dat iets in Ruby kan, betekent niet dat je het dus ook zo moet doen...
Dat iets in Ruby kan, betekent niet dat je het dus ook zo moet doen.
Wat is Ruby on Rails?
Ruby on Rails is een full-stack web application framework dat gebouwd is op het MVC-architectuurprincipe. Het framework kenmerkt zich door:
- Convention over configuration
- DRY (Don't Repeat Yourself) principe
- Snelle ontwikkelingsmogelijkheden
Bovendien heeft RoR veel ingebouwde oplossingen voor veelvoorkomende taken zoals:
- Routing
- View rendering
- Formulierverwerking
- Database schema beheer
- Background jobs
- E-mailverwerking
Het framework is bewust 'opinionated' opgezet, wat betekent dat het duidelijke keuzes maakt over hoe bepaalde zaken aangepakt moeten worden.
Ervaringen van ontwikkelaars
Binnen 10KB heb ik een aantal collega's gevraagd naar hun ongezouten mening over de voor- en nadelen van Ruby on Rails. Daar kwamen de volgende dingen naar voren:
Fijn aan RoRails
- Ruby geeft veel vrijheid
- Elegante syntaxis (zoals 'unless')
- Geen compiler
- Developer happiness staat hoog in het vaandel
- 'Automagisch' en voorspelbaar
- Goede Woordenboek · In het kortschaalbaarheidSchaalbaarheid is de mate waarin software, infrastructuur of een proces meer of minder werk kan verwerken zonder een ingrijpende verbouwing of onaanvaardbaar prestatieverlies.Lees meer

Stom aan RoRails
- Magic autoloading
- Automatische chaining (method, callback, dependent)
- Metaprogramming (Define_method)
- Slechte IDE-integratie
- Matige concurrency vergeleken met Node.js
- Lange testbestanden
- Geen statische types
- Een fanatieke community
Wat betreft die IDE-integratie
Er zijn wel wat opties om je development omgeving beter te integreren. Een betaalde variant is RubyMine. Er bestaan ook diverse opties voor VS Code/Cursor:
- https://achris.me/posts/setup-ruby-vscode/ (goed blog met extensions en settings)
- Ruby LSP
- Bust a Gem
- Rails Schema
- Rails Open Partials
Ik heb deze niet allemaal getest, dus probeer vooral ook zelf en laat het me weten als je nog andere opties hebt.
Door naar de "bad practices"
Dat er zo veel mogelijk is, wil niet zeggen dat je het dan ook maar moet doen. Dit is natuurlijk enorm subjectief; wat voor de een een 'handige tool' is, maakt dat een ander moet huilen. De volgende 7 dingen maken mij in ieder geval aan het huilen:
1. Monkey Patching
Het aanpassen of overschrijven van third party code kan leiden tot onvoorspelbaar gedrag en moeilijk te onderhouden code. Hoewel het mogelijk is, is het vaak beter om een bestaande functionaliteit te respecteren en uit te breiden via de juiste kanalen.
2. Metaprogramming
Het gebruik van define_method en dynamische class creatie kan de code minder leesbaar maken. Vooral Class.new(self) en eval constructies kunnen leiden tot complexe en moeilijk te debuggen code.
3. Concern Mazes
Het overmatig gebruik van concerns kan leiden tot complexe Woordenboek · In het kortdependencyEen dependency is een softwareonderdeel of systeem waarvan andere software afhankelijk is om gebouwd te worden of te draaien, zoals een library, framework of externe dienst.Lees meer en moeilijk te volgen code-paden. Het is belangrijk om concerns met mate te gebruiken en de structuur van de applicatie helder te houden.
4. Validation Overrides
Het omzeilen van model validaties via methoden als .update_all() of .save(validate: false) kan leiden tot Woordenboek · In het kortdata-integriteitData-integriteit betekent dat gegevens correct, volledig en onderling consistent blijven en alleen op toegestane manieren veranderen.Lees meer. Het is cruciaal om validaties te respecteren (ze beschermen ten slotte je data) en alleen in uitzonderlijke gevallen te omzeilen.
5. Custom Database Types
Het definiëren van custom Woordenboek · In het kortdatabaseEen database is een gestructureerde verzameling gegevens die software kan opslaan, opvragen en wijzigen. Een databasebeheersysteem regelt de toegang tot die gegevens.Lees meer kan leiden tot afhankelijkheid van specifieke database-implementaties. Heb je geen last van, tot je een migratie gaat doen naar een andere database. Trust me...
6. Callback Hell
De uitgebreide callback structuur in Rails ( before_validation , after_save , around_destroy , etc.) kan leiden tot complexe code-paden. Gebruik callbacks met mate en houd de flow van de applicatie helder.
With great power comes great responsibility.
7. &block Passing
Het doorgeven van code blocks als argumenten kan krachtig zijn, maar kan ook leiden tot complexe en moeilijk te testen code. Het is belangrijk om deze techniek met zorg te gebruiken.
Conclusie
Ruby on Rails biedt ontwikkelaars een krachtig en flexibel framework voor webontwikkeling. Echter, om Voltaire te quoten: 'with great power comes great responsibility'. Als je je bewust bent van de mogelijke valkuilen en 'bad practices' binnen het framework (en ze vervolgens vermijdt), kan je duurzamere en beter te onderhouden code schrijven.
In de praktijk
Als je nu met deze concepten wilt experimenteren, hier vind je een speciale repo met een aantal opdrachten: workshop-rails-10kb. Veel plezier!
MEER LEZEN
Gerelateerde artikelen

14 tools voor het automatiseren van onze bedrijfsprocessen

De rol van een backend developer in moderne projecten

De toekomst van softwareontwikkeling samenwerken met AI
Ewout

Samenwerken?
Heb je een softwarevraag of een project in gedachten? Neem contact op met Ewout. Samen bespreken we wat je nodig hebt en hoe we kunnen helpen.