Ruby On Rails
Ik heb me eraan gewaagd om iets te schrijven over Ruby On Rails. In De perfecte web developer heb ik al vermeld dat je moet experimenteren met nieuwe technologie. Enkele maanden geleden heb ik ook Rails uitgeprobeerd, maar mijn eerste impressie was niet positief. Dat kwam voornamelijk door de Ruby syntax. Wanneer je C-achtige (C, Perl, PHP) syntax bent gewend is de Ruby syntax net Spaans, soms herken je wat maar soms ook weer niet. Toch had ik de moed gevonden om opnieuw te experimenteren nadat Mathieu als grap vertelde dat iedereen op Ruby moest overstappen nadat Martin Fowler had gesproken.
Ik wil Rails leren!
Om met Ruby on Rails te kunnen werken moet je verschillende obstakels overwinnen. De eerste stap is om de Ruby syntax te begrijpen. Aangezien ik al een aantal jaren programmeer is het makkelijk om nieuwe talen aan te leren. Ik heb besloten om nog geen boek voor Ruby te kopen, gelukkig is de "PickAxe" boek (Programming Ruby, van de auteurs van Pragmatic Programmers) online te lezen. Nadat ik me ook had verdiept in de Ruby community en de filosofie achter de taal, begon ik de syntax te begrijpen. Het zit eigenlijk heel logisch in elkaar en komt intuitief over. Ik ben niet de enige!
Een voorbeeld is dat Ruby geen puntkomma kent om statements te scheiden. Alle statements moeten op een aparte regel. Hiermee forceer je jezelf om nette code te schrijven. Ook leuk is dat Ruby geheel OO centrisch is. Met de receiver.functie syntax zie je onmiddelijk dat "aaa".upcase -> "AAA" wordt. Iets wat ik uit Javascript erg fijn vind.
De volgende stap is Rails. Hiervoor heb ik wel een boek ingeschakeld, namelijk Agile Web Development with Rails (ik heb de eerste editie, de tweede editie komt binnenkort uit). Je maakt kennis met MVC en met een praktische aanpak leer je een webwinkel opzetten dat binnen een dag functioneel is.
Een van de sterke punten is ongetwijfeld het Active Record model. Je hoeft nooit meer SQL te schrijven en je zorgen te maken over het datamodel (misschien overdreven, maar zo voelt het aan). RoR leunt hevig op O/RM wat alle SQL zorgen voor je weghaalt. Een voorbeeld:
-
require 'active_record'
-
class Order <ActiveRecord::Base
-
end
-
order = Order.find(1)
-
order.discount = 0.5
-
order.save
Een simpele UPDATE zonder enig SQL. Je hoeft je niet bezig te houden met je database en je kan gewoon concentreren op je code. PHP-land kent nog geen goede Active Record model die hier aan kan tippen.
De commandline tools die je bij Rails krijgt is gewoon fantastisch. Met enkele commando's heb je zo je mappen structuur en alle magie gebeurt achter de schermen. Met de gedachte dat je met zo min mogelijke configuratie je web applicatie hebt runnen heb je binnen enkele minuten al een simpele weblog geschreven.
Het is moeilijk te omvatten hoe snel je een web applicatie kunt ontwikkelen met RoR en hoe krachtig het framework is. Vooral als kijkt hoe snel je dat zelf kan opzetten met je eigen mini framework (welke freelancer heeft dat tegenwoordig niet!). Ik ben nog geen framework tegengekomen waarmee je zo snel iets kunt knutselen. CakePHP komt er in de buurt, alleen maakt helaas geen gebruik van PHP5 waardoor het op sommige vlakken achterloopt. In het verleden beweerde ik dat ik Zend Framework zou gebruiken, maar ik ben toch gaan twijfelen.
Nog niet overtuigd van Ruby On Rails? Bekijk dan befaamde screencasts op RubyOnRails.
Volg Scriptorama via RSS!
Reageer ook!
> PHP-land kent nog geen goede Active Record model
> die hier aan kan tippen.
Dit komt enigszins in de buurt:
class Order extends atkMetaNode {}
$ordernode = &atkGetNode("Order");
$orders = $ordernode->searchDb(1);
$orders[0]["discount"] = 0.5;
$ordernode->updateDb($orders[0]);
(http://www.achievo.org/atk)
Door Ivo Jansch
op 07.05.06 @ 11:45 pm | Permalink
Zend Framework biedt toch ook zoiets:
class Todo extends Zend_Db_Table {}
$todoTbl = new Todo();
$todo = $todoTbl->find(15);
$todo->done = 1;
$todo->Save()
Biedt Achievo ook pessimistic locking, Ivo? Aangezien "discount" gewijzigd kan worden tussen je toewijzing en je updateDb aanroep?
Door Mathieu Kooiman
op 07.06.06 @ 9:10 am | Permalink
Mathieu:
> Zend Framework biedt toch ook zoiets
Yep, Active Record / Table Data Gateway, maar in vergelijking met Rails' Active Record geen relaties/associaties (belongs_to, has_many, has_one en has_and_belongs_to_many). CakePHP imiteert: http://api.cakephp.org/model__php5_8php-source.html.
Door Michel
op 07.06.06 @ 8:33 pm | Permalink
Wens stiekem ook wel 's dat ik ooit begonnen was met Ruby i.p.v. PHP ;) Zie bijvoorbeeld hoe je o.a. operator methods kunt gebruiken om met native syntax* bijvoorbeeld een SQL statement te genereren: http://mephle.org/Criteria/. Voor zoiets leent PHP zich niet :(. Ruby's object model kicks ass.
* Er gelden wel een aantal beperkingen/regels, zo zijn && en || geen operator methods en moeten expressies van links naar rechts worden geschreven, met links een object dat een message van een operator method ontvangt en verwerkt (window.width window.width).
Door Michel
op 07.06.06 @ 9:11 pm | Permalink
Criteria ziet er wel interessant uit, moet ik eens mee experimenteren.
Door Tri Pham
op 07.10.06 @ 10:20 am | Permalink
Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>