[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