[Uneex] Ruby on Rails

Макс Лапшин max на maxidoors.ru
Пн Мар 27 13:30:22 MSD 2006


	Учитывая, что эта милая штучка у нас еще очень мало используется,
я решил вкратце рассказать про нее.

Ruby on Rails - новомодный фреймворк для создания сайтов. Для быстрого и  
комфортного.
"Вебпрограммирование без геморроя", как называют сами авторы.

Выводы в самом низу после этой болтовни.



Ruby - скриптовый, динамический язык. Очень сильно объектный, вообще во  
многих вещах
напоминающий яваскрипт: на ходу можно добавлять к объектам новые методы,  
поля и т.д. и т.п.
Скажем, если не хватает имеющейся функциональности в классе, то она  
расширяется именно так.

Сложившаяся практика языка очень поощряет использование "Fluent  
Interfaces".
Поясню: выбрать из директории все файлы с расширением .gz так:
list = Dir.new(dirname).entries.sort.delete_if { |entry| ! (entry =~  
/\.gz^/) }


На этом механизме построен фреймворк Rails.
Он очень жестко заточен на паттерн MVC (Model View Controller).
--- Лирическое отступление ---
Идея состоит в том, что все
данные с их бизнес-логикой находятся в модели, View умеет всего лишь  
отрисовывать,
контроллер выбирает нужные объекты модели, посылает им сообщение и  
отправляет их на
представление (view) на отрисовку. Лучшей проверкой для стройности  
приложения является
переделка веб-приложения в программу командной строки.
--- Дальше про Rails ---

Rails состоит из следующих компонент: Active Record, Active View и  
ActiveController

ActiveRecord, пожалуй, самая замечательная часть. Эта подсистема  
занимается тем, что
вычитывает строки из таблицы в базе данных в объект и сохраняет обратно. В  
чем прелесть?
Весь конфиг Rails заключается просто в настройке подключения к базе  
данных. Больше ничего.
Дальше объявляется класс модели, называющийся так же (почти так же), как и  
соотв. таблица
к базе данных.
Скажем, есть таблица:
create table articles (
    id bigint primary key,
    title varchar(255),
    body text
);

Создается класс:
class Article << ActiveRecord::Base
end

Все. Этого достаточно, что бы можно было вытаскивать объекты типа Article  
с полями title, body.
Причем, если схема таблицы изменится, то все поля будут перечитаны  
динамически.

Дальше начинается самое веселое. Связывание классов. Добавляем понятие  
категорий:

create table categories (
   id bigint primary key,
   title varchar(255)
);

и добавляем к статьям поле принадлежности к категории.

alter table articles add column category_id bigint;


И делаем следующее шаманство:

class Article << ActiveRecord::Base
   belongs_to :category
end

class Category << ActiveRecord::Base
   has_many :articles
end


После этого у объектов класса Article появляется поле category, которое  
можно модифицировать, добавлять, менять, удалять (все SQL апдейты пройдут  
самостоятельно), а у Category появляется массив articles. С которым так же  
можно делать все.



============= Active View ==============
Тут ничего особенного, кроме того, что проект Rails очень активно дружит с  
Javascript-библиотекой Prototype.
Что это означает? Что огромное количество Ajax-овых примочек работают из  
коробки. Upload progress,
автодополнение а-ля Google Suggest, drag and drop и многие другие фишки  
легко контролируются из
методов-хелперов. Но это так. Вкусная примочка. Шаблонный язык TAL мне  
нравится больше, чем
то, что есть там.


============= Выводы и текущие ощущения =========
Штука это малоизвестная, хотя уже и в России некая активность  
rails-сообщества имеется.
В отличие от PHP ее авторы зарабатывают этим себе на жизнь и поэтому  
держат довольно
стройной. В отличие от того же PHP, писать код просто приятно (особенно в  
сравнении).
Сравнивать с питоном я бы не стал, потому что мало про какие фреймворки на  
питоне знаю.
Лично я для себя вопрос с PHP закрыл, потому что больше не считаю  
возможным тратить
свое время (и соответственно деньги) на _это_.


Что касается перспектив (не вытеснит ли .NET все, в том числе и в вебе),  
то думаю что нет.
Я бы сказал, что веб - не самое комфортное место для мелкософта и для их  
продуктов, но
внятно пока подтвердить и разъяснить это не могу. Скажу одно: грамотное  
создание веб-сайта
сегодня задача _не из простых_. И халтура тут лезет сразу: начиная с  
отсутствующего
дизайна и дилетанстской, неаккуратной верстки, заканчивая дерьмовым  
программированием,
выражающемся в жутком неудобстве использования сайта. И "быстро наклепать"  
здесь не проходит.
Это не в Дельфе формочки накидать. Что касается сравнения с .NET, то тут  
все непросто.
.NET действительно удобная, толковая (по крайней мере в рамках моего  
дилетанстского знакомства с ней)
хрень. А вот ASP.NET - это нечто. Тонны строк только что бы  
сконфигурировать что-то.


Ruby on Rails интересен тем, что к этой вещи притягиваются как люди,  
писавшие на "малых" языка,
типа PHP, так и люди, реализовавшее не одно "серьезное" решения типа J2EE.  
Вообщем, на сегодня
мне это кажется наиболее передовой вещью.


Цифры такие: первичное развертывание простейшего Rails приложения  
(предположим, что сам Ruby и Rails
уже установлены) занимает 40 секунд. После этого уже можно зайти на соотв.  
сайт у себя и
добавлять и удалять записи в таблице.



Если кому-то будет интересно, могу сюда положить очень хорошую книжку  
Agile Web Development on Rails.


Подробная информация о списке рассылки Uneex