31 ms·
Because the way above is more natural.
by rue 16y ago
Because the way above is more natural.
- scott_s 16y agoNot to me; I find it too cute. The reason I call it such is that it uses a powerful mechanism to implement a trivial thing.
- draegtun 16y agoI find using this mechanism in builders like this is more appropriate and not an abuse. Its definitely aids development & maintenance. Conversely though I find that using it in ActiveRecord is cute (ie. a bad thing!).
- scott_s 16y agoWhy do you find it cute in ActiveRecord? (Recall that I don't develop with Ruby or Rails, so I'm genuinely curious.)
- draegtun 16y agoFirst off, I feel using mechanisms like method_missing should be used carefully. The Perl community abused things like AUTOLOAD & monkey-patching some years ago and learnt hard lessons and have now established good practises for their use. I feel Ruby/Rails world is going through the same growing pains but it does look like they are now maturing (eg. Rails 3). Now IMHO I see a builder as a good case for a method_missing mechanism (I think there were a few others mentioned in thread/post). No magic, just a simple one-to-one relationship between code and what it does (result): b.name "Jim" => <name>Jim</name> However I feel something like find_by_name_and_address in ActiveRecord is cute (both in nice and ugly sense!). There is so much more going on underneath an ORM that I'd be wary of the extra layers of complexity upon what is already an (acceptable) impedance mismatch. Bottom line, an ORM is important to me and I don't want any loose cogs lying around! I'd prefer to be explicit here: # using DBIx::Class my $p = $schema->resultset('Addresses')->find({ name => '...', address => '...' }); So while find_by_name_and_address is a pretty nice aesthetic its feels more plastic cosmetics compared the elegant cosmetics that Builder solutions provide. Disclaimer: I haven't touched Rails for about 4 years now. I don't actually know for certain that something like find_by_name_and_address did or still uses method_missing. It could actually build methods like these straight from schema introspection. I would guess method_missing was used to avoid a performance hit on building all these at startup? If so then this could be a good argument for using method_missing here!
- burke 16y agoAs of now, it uses method_missing to catch the first call to find_by_name_and_address, then defines the method inline, so future calls are handled by an actual method.