Remco
Door Remco
12 mei 20254 min. leestijd

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

RailsSoftware Development

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⁠
Remco's presentatie

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:

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!

Ewout

Contactpersoon: 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.

CONTACT

Neem contact met ons op

Heb je een vraag of wil je sparren over je software? Laat je gegevens achter, dan nemen we snel contact met je op.