» Главная
eXcode.ru » Статьи » Ruby
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 12





Ruby on Rails / Часть 1




Вы, наверное, часто слышали о том, насколько Ruby on Rails повышает производительность и качество труда веб-программиста. Честно говоря, чтобы полностью понять из-за чего вся эта шумиха нужно прочитать [Agile Web Development with Rails]. Однако, в небольшой серии статей я всё таки попытаюсь дать общее представление о том, что же такое эти [рельсы] и чем они так хороши.

Очень краткая история Ruby и RoR

Ruby — открытый объектно-ориентированный и интерпретируемый язык программирования — был впервые выпущен в 1995 году японским программистом Юкихиро Матцумото (Yukihiro Matsumoto). Матцумото начал работу над этим языком 24 февраля 1993 года после того, как Perl и Python не оправдали его ожиданий.



Мне был нужен [скриптовый] язык, который был бы мощнее, чем Perl и более объектно-ориентированнее, чем Python. Поэтому я решил создать свой собственный язык программирования.

Из интервью для O’Reilly LinuxDevCenter

Ruby — полностью объектно-ориентированный язык, т.е. абсолютно всё там является объектом, без каких-либо исключений. Несмотря на это, он позволяет использовать несколько парадигм, т.е. вы можете программировать процедурно, объектно-ориентированно или же функционально. Однако, стоит заметить, что все [внешние] функции являются методами объекта self, а переменные — его членами и, таким образом, ОО принципы не нарушаются. Также язык поддерживает мета-программирование, что сыграло существенную роль в успехе Ruby on Rails. Вообще, это очень богатый и интересный язык, поэтому полностью описывать все его возможности и преимущества здесь я не буду. Подробнее об этом языке программирования вы можете почитать на официальном сайте. А попробовать его в действии, не устанавливая себе на компьютер, можно с помощью этого интерактивного онлайн интерпретатора.

Ruby on Rails (RoR или же просто Rails) — открытый фреймворк для построения веб-приложений, который написан на Ruby и следует архитектуре MVC (Model-View-Controller). Он был выделен из Basecamp — программы для управления проектами и первый его релиз состоялся в июле 2004 года. И хотя версия 1.0 появилась очень недавно — в декабре 2005 — RoR стремительно набирает популярность. Создателем фреймворка является сотрудник компании 37signals — Дэвид Хэйнемеер Ханссон (David Heinemeier Hansson).


Фото с его официального блога

Но это всё были голые и скучные факты.

Кратко о шумихе и преимуществах

Если вы будете искать информацию о RoR, то наткнетесь на громкие заявления о том, что с помощью этого фреймворка можно разрабатывать веб-приложения в 10 раз быстрее, чем на Java (с её фреймворками, разумеется) и т.п. Так вот не верьте всему этому. Сначала попробуйте сами, а потом вам уже не надо будет ничего говорить. Вы и так поймёте, что это действительно правда.

Так чем же так хороши эти рельсы? Самое главное, по моему мнению, это то, что фреймворк рождён не в искусственных условиях, а [выдран] из работающего и приносящего прибыль программного продукта. Таким образом, ещё до первых упоминаний, он прошёл обкатку в реальных условиях, с реальными пользователями и рисками. Если же смотреть на архитектурно-технические аспекты, то

— во-первых, архитектура MVC позволяет легко отделить уровни данных, представления и бизнес логики друг от друга;
— во-вторых, RoR строго следует принципу DRY (Don’t Repeat Yourself — не повторяйся), что позволяет писать гибкие и легкосопровождаемые приложения;
— в-третьих, Rails позволяет сосредоточиться на задаче, а не на изобретении колеса. Если вам нужно проверить заполненно ли поле name, вы просто напишите validates_presence_of :name и перейдёте к реализации более важных вещей (или пойдёте пить чай);
— и наконец, это фреймворк от практикующих веб-программистов практикующим веб-программистам, а не плод больного сознания — помешанных на теории — [разработчиков], маркетинговая заглушка или же курсовая работа по информатике.

Здесь и в следующих статьях я хочу повторить структуру книги [Agile Web Development with Rails], потому что считаю её оптимальной для описания сий чудной вещи. Начнём, пожалуй.

Уровень данных (Model) — ActiveRecord

ActiveRecord это реализация ORM, поставляемая с Rails. Но что же такое ORM? ORM (Object-Relational Mapping) — это техника представления базы данных с помощью объектов. Т.е. класс представляет таблицу, объект строку, а его поля, соответственно, колонки. Т.к. большинству читателей знаком [C-like] синтаксис, приведу пример на Java.

Возьмём некоторую таблицу books:
id int(10)
name varchar(100)

Эта таблицу можно представить, как класс Book:

public class Book {
public int id;
public String name;

/* … */
}

Т.е. Book thinkinginjava = new Book(1); возвратит нам строку в таблице books с id = 1.

ActiveRecord предлагает нам очень богатую реализацию ORM, которая сама строит иерархию классов, основываясь на структуре таблицы. К тому же, здесь (как, впрочем, и повсюду в RoR) поддерживается принцип [соглашения вместо конфигураций]. Но текст текстом, а код скажет всё сам за себя. Если взять вышеприведенную таблицу, то нам нужно всего-лишь запустить скрипт генерации модели:

ruby script/generate model Book

И вуаля! В папке /app/models/ появился файл book.rb, открыв который мы увидим примерно следующий код:

class Book < ActiveRecord::Base
end

Итак, что же произошло? У нас появилась готовая для работы модель таблицы books. При инициализации Rails подразумевает, что название таблицы это название класса в множественном числе, где слова разделены нижним подчёркиванием. Т.е. таблице orders соответствует класс Order, line_items — LineItem, people — Person и т. д. Таким образом мы уже сейчас можем его использовать:

defensivedesign = Book.new
defensivedesign.name = "Defensive Design for the Web"
defensivedesign.save

Как мы видим, по умолчанию реализованы аттрибуты класса, которые соответствуют колонкам в таблице и методы CRUD (Create, Retreive, Update, Delete). Я не буду описывать здесь эти методы, дабы не превращать эту статью в некое подобие мануала. Их много и они весьма удобны.

Итак, с помощью некоторой [магии] за нас было сделано огромное количество рутинной работы. Но, многие могут подумать, что за пределы этой магии вылезти никак нельзя. Это не так, потому что все [соглашения] могут быть легко проигнорированы. К примеру, если у вас уже есть готовая база данных, которую менять никак нельзя и таблица для книг в ней называется knigi, то вам всего лишь нужно указать на это:

class Book < ActiveRecord::Base
set_table_name "knigi"
end

Тоже самое и с другими вещами, такими как, к примеру, первичные ключи. По умолчанию, RoR подразумевает, что поле с первичным ключом называется id (что, кстати, очень логично), однако вы можете это исправить, написав set_primary_key "kitob_cifra".

Одно из немногих мест, где нужны настройки это файл /config/database.yml, в котором вы указываете тип и название базы. Стоит заметить, что при разработке рекомендуется использовать три одинаковые базы данных для трёх состояний системы: production, development и test. Как видно из названий, production это база для стабильных версий системы, development — для разработки, а test предназначается для автоматических тестов.

Пример файла database.yml:

development:
adapter: mysql
database: books_development
username: root
password: password
host: localhost

test:
adapter: mysql
database: books_test
password: password
host: localhost

production:
adapter: mysql
database: books_production
password: password
host: localhost

На сегодняшний день, Ruby on Rails поддерживает такие СУБД, как MySQL, DB2, PostgreSQL, Oracle, SQLite, MS SQL Server.

Про автоматические тестирование и поддержку TDD (Test-driven Development) мы поговорим уже в следующих статьях.

Это далеко не всё, что относится к ActiveRecord и я не сказал про связи между таблицами, транзакции, аггрегации, обратные вызовы и многое другое. Это просто не входит в формат данной статьи. Замечу только, что практически всё в RoR реализуется восхитительно просто. Вам нужно представить таблицу в виде дерева объектов, отсортированного по полю name? Нет ничего проще!

class Category < ActiveRecord::Base
acts_as_tree :order => “name”
end

Итак, мы увидели, что уровень данных в RoR реализован в простом и, в то же время, очень мощном инструменте — ActiveRecord, который берёт на себя подавляющее большинство рутинных операций и позволяет сосредоточиться на самой задаче. В следующий раз я расскажу об уровне бизнес логики [на рельсах], т.е. о контроллерах.

Автор: Антон Ковалёв
Источник: blog.webdev.uz
К началу статьи





Добавил: MadvEXДата публикации: 2008-02-11 00:58:22
Рейтинг статьи:4.00 [Голосов 1]Кол-во просмотров: 6226

Комментарии читателей

Всего комментариев: 0
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Какой жанр фильмов вам нравится?
Ужасы
11% (23)
Триллеры
7% (14)
Комедии
28% (57)
Боевики
4% (8)
Фантастика
27% (54)
Элитарное кино
2% (4)
Мультфильмы (3D, Анимэ)
11% (23)
Мелодраммы
1% (3)
Драммы
2% (4)
Другой
6% (13)

Проголосовало: 203
Сидит вечером программист у компота и третий час подряд кликает на свою мышь. Сзади подходит жена:
- Дорогой, может меня лучше покликаешь?
Программист, бешено колотя кулаком по мыши:
- Блин, кликалка у меня не работает.
Рейтинг: 5.5/10 (2)
Посмотреть все анекдоты