- •Розділ і: еволюція інструментальних технологій в середовищі Ruby on Rails
- •1. Знайомство з Ruby on Rails
- •2. Поговоримо про Ruby
- •3 . Філософія Ruby
- •4. Можливості Ruby
- •5. Переваги Rails
- •6. Філософія Ruby on Rails
- •7. Як працює mvc в Ruby on Rails?
- •9. Скаффолдинг
- •8. Active Record
- •10. Ajax (Asynchronous JavaScript and xml)
- •1. Популярність серед користувачів
- •2. Мови програмування
- •3. Концептуальна суть Rails та Django
- •4. Модель і база даних
- •5. Url Роутинг та контроллери
- •6. Контроллер, вид
- •7. Шаблон і форма
- •8. Адміністрування користувача
- •9. Ajax
- •10. Засоби для тестування
5. Переваги Rails
“Ruby on Rails is a breakthrough in lowering the barriers of entry to programming. Powerful web applications that formerly might have taken weeks or months to develop can be produced in a matter of days.”
-Tim O'Reilly, Founder of O'Reilly Media
До цього часу багато було сказано про плюси RoR. Та мимоволі постає питання: яким чином йому вдається процвітати не маючи в своєму активі обширних бібліотек, як це потрібно в інших мовах? Пропоную розглянути саме ці аспекти, що надають Rails такої гнучкості.
Безперечно, всі розробники Веб-ужитків, що працюють з Rails повинні дотримуватись двох концепцій: DRY і домовленість по конфігурації. Хотілося б докладніше розглянути їх. Отже, DRY – “Don’t Repeat Yourself” в перекладі означає «Не повторюйся». А саме, кожна стрічка коду повинна бути унікальною. І якщо хоча б два методи мають одинакові стрічки, то їх неодмінно потрібно об’єднувати в окремий метод. Наприклад: якщо у методах add_to_cart, empty_cart потрібно використати flash[:notice] = msg
redirect_to :action => :index
то простіше помістити їх в окремий метод redirect_to_index(msg). Такий прийом надає коду лаконічності та зменшує ресурсні затрати ужитку вцілому.
class StoreController < ApplicationController
def add_to_cart
begin
product = Product.find(params[:id])
rescue ActiveRecord::RecordNotFound
logger.error("Try to get nil product #{params[:id]}")
redirect_to_index("Wrong product's id ")
else
@cart = find_cart
@cart.add_product(product)
redirect_to_index
end
end
def empty_cart
session[:cart] = nil
redirect_to_index("Now your cart is empty")
end
private
def redirect_to_index(msg)
flash[:notice] = msg
redirect_to :action => :index
end
end
Ще одна цікава річ – це домовленість по конфігурації. Тобто, розробнику пропонується певний набір правил для написання того чи іншого елементу програми. З одного боку одразу всі правила тяжко запам’ятати. А з іншого – ця концепція є ідеальним методом для використання всіх автоматичних кодів, що на інших платформах мають вигляд повсякчасної рутинної роботи. Серед таких конфігурацій, наприклад:
Ім’я контроллера завжди повинне бути в однині, так як платформа по замовчуванню створює базу даних на основі контроллера, але в множині;
Ім’я класу повинне починатися з великої букви, при чому, якщо воно має декілька слів, то, відповідно, вони писатимуться разом і кожне слово з великої букви; такий стиль написання називають «верблюжим стилем» (“Camel casing”).
Для розділення слів при найменуванні методів, таблиць баз даних, колонок, атрибутів та символів потрібно використовувати нижнє підкреслення. Наприклад, щоб представити клас з іменем ChunkyBacon можна використати символ :chunky_bacon.
Та це не все!!! Саме цікаве ще попереду…
6. Філософія Ruby on Rails
“Rails is the killer app for Ruby.”
Yukihiro Matsumoto, Creator of Ruby
Уже декілька розділів підряд пов’язані з філософією. А що ж дійсно ховається за словом «філософія». У нашому випадку це ті методи, точніше кажучи принципи, за якими працює програма. Rails побудований на філософії MVC – Model-View-Controller.
Що ж собою по суті являє MVC? MVC в перекладі означає Модель-Вид-Контроллер. Це архітектурний шаблон, який використовується при проектуванні та розробці програмного забезпечення. Він ділить програму на три частини. У тріаді до обов'язків компоненту Модель (Model) входить зберігання даних і забезпечення інтерфейсу до них. Вигляд (View) відповідальний за представлення цих даних користувачеві. Контролер (Controller) керує компонентами, отримуючи сигнали у вигляді реакції на дії користувача, і повідомляючи про зміни модель компоненту. Така внутрішня структура в цілому розбиває систему на самостійні частини і розподіляє відповідальність на різні компоненти.
MVC ділить дану частину системи на три самостійні частини: введення даних, компонент обробки даних і виведення інформації. Модель, як вже було відмічено, інкапсулює ядро даних і основний функціонал з їхньої обробки. Також компонент Модель не залежить від процесу введення або виведення даних. Компонент виводу Вигляд може бути декілька взаємозв'язаних областей, наприклад, різні таблиці і поля форм, в яких відображається інформація. У функції Контролера входить моніторинг за подіями, що виникають в результаті дій користувача (зміна положення курсора миші, натиснення кнопки або введення даних в текстове поле).
Зареєстровані події транслюються в різні запити, що направляються компонентам Моделі або об'єктам, відповідальним за відображення даних. Розділення моделі від представлення даних дозволяє незалежно використовувати різні компоненти для відображення інформації. Таким чином, якщо користувач через Контролер внесе зміни в Модель даних, то інформація, представлена одним або декількома візуальними компонентами, буде автоматично відкоректована відповідно до змін, що відбулися.
Мета шаблону — гнучкий дизайн програмного забезпечення, який повинен полегшувати подальші зміни чи розширення програм, а також надавати можливість повторного використання окремих компонент програми. Крім того використання даного шаблону в великих системах приводить їх до певної впорядкованої структури і робить зрозумілішими завдяки зменшенню їх складності. Наприклад, у мові програмування Java концепція MVC підтримується на рівні стандартних класів-бібліотек. В результаті використання парадигми MVC програміст отримує в своє розпорядження могутню структуру об'єктів-компонентів, функції яких строго розмежовані, що гарантує надійність і розширюваність системи, що розробляється.
