Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Marek Osvald 2011, v1.1

Podobné prezentace


Prezentace na téma: "Marek Osvald 2011, v1.1"— Transkript prezentace:

1 Marek Osvald 2011, v1.1 http://fi.muni.cz/~xosvald/pv219/rails.pdf

2

3  1994-5, Rasmus Lerdorf  momentálně ve verzi 5.3.5, chystá se verze 6  není nikde kompletně definován → pouze jediný interpret, napsán v C (pod Windows navíc pouze 32bitový)

4  „Based on my limited experience [...] all the PHP code I’ve seen in that experience has been messy, unmaintainable crap. Spaghetti SQL wrapped in spaghetti PHP wrapped in spaghetti HTML, replicated in slightly-varying form in dozens of places.“ – Tim Bray (Google)

5  Hlavní argumenty proti PHP  podivné licence (různě licencované moduly)  cílená pomalost (Zend Accelerator)  3 zcela nekompatibilní verze (4.3, 4.4, 5.0)  špatná podpora znakových sad  špatná rekurze  nekonzistentní ▪ pojmenování funkcí (spojené × oddělené × camelCase, 2 × to) ▪ pořadí argumentů ▪ návratové hodnoty  (string)"false" == (int)0 → true  neobjektové frameworky (CakePHP, Symphony,...)

6  1995, まつもとゆきひろ (Yukihiro Matsumoto)  momentálně ve verzi 1.9.2., chystá se verze 2.0  vlastnosti  VHLL - Very High-Level Language  skriptovací  objektově orientovaný  dynamicky typovaný (duck typing)  reflektivní  automatická správa paměti (garbage collector)

7 NON-DUCK TYPING (JAVA) public class Duck implements Bird { void walk() { } void quack() { } } public void foo(Duck duck) { duck.walk(); duck.quack(); } DUCK TYPING (RUBY) class Duck < Bird def walk end def quack end def foo(duck) duck.walk() duck.quack() end

8  oficiální interpret (MRI) napsán v C  existují i jiné  YARV – C (pro verzi 2.0)  JRuby – Java  Rubinius – C++  IronRuby – C#/.NET  MacRuby – Objective-C  HotRuby - JavaScript

9  vychází z Perlu a Pythonu v určitých ohledech se podobá Smalltalku a dalším jazykům  přebírá i některé prvky funkcionálního paradigmatu  plně objektově orientovaný 3.times() do puts(‘Hooray!\n‘) end  balíčkovací nástroj RubyGems (správa knihovních balíků)  www.ruby-lang.org www.ruby-lang.org

10  2004, David Heinemeier Hansson  momentálně ve verzi 3.0.4  framework pro webové aplikace napsaný v Ruby  skládá se z několika základních knihoven (ActiveRecord, ActionPack, ActiveSupport, ActionMailer,...)

11  vlastnosti  modulární návrh (i základní knihovny lze z frameworku vynechat)  MVC architektura  nezávislost na konkrétní DB (drivery)  migrace (verzování DB)  automatické routování (i bez mod_rewrite )  navrženo pro agilní metodiky, obzvláště TDD (Test Driven Development)  úzká integrace s verzovacím nástrojem Git

12 ... <?php $connection = mysql_connect($server, $login, $pass); mysql_select_db($database); $result = mysql_fetch_array(„SELECT * FROM users WHERE id=$id“); mysql_close($connection); ?>

13  MVC  Model – datová logika (připojení k DB, SQL, validace dat,...)  View – prezentační logika (kde v HTML se mají získaná data vypsat)  Controller – aplikační logika (co se má načíst z DB, ověření uživatele ze session,...)

14

15  mapování adresy na příslušný controller a akci  http://mujserver.cz/user.php?=1  http://mujserver.cz/user/1 root :to => „users#index“ match ‚/profile/:id‘ :to => „users#show“

16 class User < ActiveRecord::Base end User.all() # SELECT * FROM users User.find(1) # SELECT * FROM users WHERE id=1 User.find_by_name(‚Jan Novak‘) # SELECT * FROM users WHERE name=‚Jan Novak‘ User.count() # SELECT count(*) FROM users AS count

17 class User < ActiveRecord::Base belongs_to :user_group has_many :projects validate :name, :presence => true :uniqueness => true :length => 5..50 end pepa = User.find_by_name(‚Josef Novák‘) pepovy_projekty = pepa.projects() pepova_skupina = pepa.user_group()

18 class UsersController < ApplicationController def index #users/index.html.erb @users = User.all() end def show #users/show.html.erb @user = User.find(params[:id]) end def destroy @user = User.find(params[:id]) @user.destroy() flash[:notice] = „Uzivatel uspesne smazan“ redirect_to ‚index‘ end

19 ...

20  hierarchické skládání layoutů  aplikace ▪ /app/views/layouts/application.html.erb  controlleru ▪ /app/views/layouts/users.html.erb  stránky ▪ /app/views/users/index.html.erb

21  3 implicitní prostředí  development – znovunačítání veškerého kódu (pomalé, ale dobrá reakce na změny)  test – rozšíření debugovacích informací  production – pro ostrý provoz, zrychlené  další uživatelsky definovaná prostření

22  skvělý ladící nástroj  načte celé vaše prostředí z Rails do řádkového interpretu Ruby  velice rychle umožní odhalit problém na aplikační nebo datové vrstvě  existují rozšíření i pro prezentační vrstvu (Webrat)

23  základní testovací jednotka Test::Unit (poslední dobou se od ní spíše ustupuje)  Rspec require ‚user‘ describe „User“ it „shouldn‘t allow a user without name to be saved" do user = User.new(:name => nil, :email => „jan@novak.cz“) user.save.should be_false end

24  Hal Furton: Ruby – kompendium znalostí pro začátečníky i profesionály  The Ruby Way 2nd Edition  Zoner Press/Addison Wesley

25  Steven Holzner: Začínáme programovat v Ruby on Rails  Beginning Ruby on Rails  Computer Press/Wrox

26  Ruby  http://www.ruby-lang.org http://www.ruby-lang.org  http://www.tryruby.org http://www.tryruby.org  http://www.root.cz/knihy/ruby-tutorial/ http://www.root.cz/knihy/ruby-tutorial/  http://rubybrain.com http://rubybrain.com  Rails  http://api.rubyonrails.org http://api.rubyonrails.org  http://www.railstutorial.org http://www.railstutorial.org  http://railsforzombies.org/ http://railsforzombies.org/  http://www.railsapi.com http://www.railsapi.com

27


Stáhnout ppt "Marek Osvald 2011, v1.1"

Podobné prezentace


Reklamy Google