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



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





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]Кол-во просмотров: 6329

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

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

Пароль:



Регистрация

Как вы относитесь к спаму?
Положительно, Я сам спамер.
11% (21)
Безразлично
11% (21)
Нормально, сам бы спамил
6% (11)
Отрицательно
67% (129)
А ЧТО, ЕСТЬ СПАМ ...
6% (11)

Проголосовало: 193
Чем компьютер лучше женщины:
1. Компьютер не скажет: "ты мне не нравишься, я люблю другого".
2. Кожух с компьютера снимается без сопротивления.
3. Изображение на компьютере легко поменять.
4. Звук на колонках легко выключить.
5. У компьютера не бывает месячных.
6. Компьютер не потащит тебя знакомится со своими родителями.
7. Память на компьютере можно увеличить.
8. У девушки не бывает режима турбо.
9. Вирусы компьютера пользователю не передаются.
10. Компьютер можно собрать из тех частей, которые тебе нравятся.
11. Компьютер можно отформатировать.
12. У компьютера не болит голова.
13. Компьютер можно иметь в присутствии других.
14. Компьютер можно иметь везде.
15. К компьютеру можно подключить дополнительные периферийные устройства.
16. Компьютер не залетит.
17. Компьютер потерпит любые извращения.
18. Компьютер не ревнует, когда вы имеете другой компьютер.
19. На компьютер можно поставить пароль.
20. Девушку нельзя перезагрузить и начать всё сначала.
21. Сетевой сервер может одновременно обслуживать уйму народа.
22. На компьютере можно играть с друзьями.
23. Компьютер не заставит тебя на нем женится.
24. Компьютер не обидится, если ты назовешь его другим именем.
25. На компьютере можно отлаживать чужие программы.
26. У компьютера не бывает тещи.
27. Компьютер всегда запомнит, что ему скажешь.
28. Компьютер никогда не опаздывает.
29. Компьютер не боится мышей.
30. Компьютер не требует постоянно спонсировать его.
31. С глюками компьютера легко справится.
32. Компьютер грузится быстрее.
33. Компьютер не волнует, когда ты кончишь.
34. Компьютер мыслит логически.
35. Компьютер не потеет.
Рейтинг: 7/10 (3)
Посмотреть все анекдоты