Гостевая
Форум
Разделы
Главная страница
Js скрипты
Php скрипты
Html шаблоны
Книги по Web дизайну
Статьи


Главная страница статей --> Хитрости при программировании php, заметки по базам данных

Ruby on Rails / Часть 1

Источник: realcoding.net

Вы, наверное, часто слышали о том, насколько 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, который берёт на себя подавляющее большинство рутинных операций и позволяет сосредоточиться на самой задаче. В следующий раз я расскажу об уровне бизнес логики «на рельсах», т.е. о контроллерах.



Похожие статьи:
- Создание динамических элементов страницы с помощью CSS.
- Поиск по сайту - статичный контент (Perl)
- Аспектно-ориентированная веб-разработка и PHP
- Оптимизация Apache + PHP + PostgreSQL
- Выбор ключевых слов
- Что такое Ruby on Rails 1.0?
- fror = flex + ruby on rails
- Как зашифровать HTML-код веб-страницы
- Собственная статистика поисковых слов (Яндекс, Рамблер, Google,...) на PHP
- Класс для создания меню навигации на сайте
- Drag & Drop на AJAX
- Интернет-раскрутка: с чего начинать?
- Защита сайта от спамеров с использованием PHP. Практическое применение кода подтверждения с картинки


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |
[0.001]