Tải bản đầy đủ (.pdf) (28 trang)

Tiểu Luận Tổng quan về ngôn ngữ Ruby - các vấn đề hiện đại của công nghệ phần mềm

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (404.57 KB, 28 trang )

CÁC VẤN ĐỀ HIỆN ĐẠI CỦA CÔNG NGHỆ PHẦN MỀM
Chủ đề: Tổng quan về ngôn ngữ Ruby
Giảng viên: TS. Trương Anh Hoàng
Thành viên:
Nhữ Tuấn Anh
Đào Đức Thịnh
Đàm Thái Nhiên

Hà Nội 01/10/2012


Mục lục
Chương 1: Ngơn ngữ lập trình Ruby .............................................................................................. 4
1.

Lịch sử hình thành..................................................................................................................... 4

2.

Giới thiệu về ngơn ngữ ruby ..................................................................................................... 4

3.

Xem mọi thứ như hướng đối tượng .......................................................................................... 4

4.

Ruby là một ngôn ngữ mềm dẻo và linh hoạt ........................................................................... 5

Chương 2: Ngôn ngữ Ruby............................................................................................................. 6
1.



Biến trong ruby ......................................................................................................................... 6

2.

Các dạng dữ liệu trong ruby...................................................................................................... 6
2.1.

Số ....................................................................................................................................... 6

2.2.

Ký tự .................................................................................................................................. 6

3.

Mảng trong ruby........................................................................................................................ 7

4.

Cấu trúc điều khiển trong ruby ................................................................................................. 7

5.

Vòng lặp trong ruby .................................................................................................................. 9
5.1.

While.................................................................................................................................. 9

5.2.


Util ..................................................................................................................................... 9

5.3.

For...................................................................................................................................... 9

5.4.

Cấu trúc liệt kê................................................................................................................... 9

5.5.

Hash ................................................................................................................................. 10

5.6.

Có một vấn đề trong đây là Blocks.................................................................................. 11

6.

Lớp và modules....................................................................................................................... 12

7.

Thừa kế trong Ruby ................................................................................................................ 14

Chương 3: Framework Rails......................................................................................................... 16
1.


Thế nào là framework ............................................................................................................. 16

2.

Mô hình MVC......................................................................................................................... 16
2.1.
2.2.

Các thành phần của mơ hình MVC.................................................................................. 16

2.3.
3.

Khái qt về mơ hình MVC............................................................................................. 16

Ưu và nhược điểm của mơ hình MVC ........................................................................... 17

Ruby on Rails.......................................................................................................................... 18
3.1.

Nguồn gốc của Rails........................................................................................................ 18

3.2.

Mơ hình MVC với Rails .................................................................................................. 18

3.3.

Tự động sinh code trong Rails......................................................................................... 19


3.4.

Vòng đ ời phát triển một ứng dụng trong Rails ................................................................ 19


3.5.

So sánh Ruby on Rails với Java và PHP ......................................................................... 20

Chương 4: Cài đặt và phát triển môi trường Rails ........................................................................ 22
1.

Các môi trường cụ thể để phát triển Ruby on Rails ................................................................ 22

2.

Cách cài đặt môi trường phát triển Ruby on Rails.................................................................. 22

3.

Cài đặt công cụ hỗ trợ code..................................................................................................... 22

Chương 5: Những vấn đề cụ thể của Rails.................................................................................... 24
1.

Bộ công cụ để phát triển ......................................................................................................... 24

2.

Đặc điểm cơ bản với cơ sở dữ liệu của Ruby on Rails ........................................................... 25

2.1.

Giới thiệu Active Record................................................................................................. 26

2.2.

Đánh giá Active Record với các hệ csdl khác ................................................................. 26

2.3.

Thao tác sử dụng Active Record ..................................................................................... 26

Chương cuối: Tổng kết ................................................................................................................. 28
Phụ Lục ......................................................................................................................................... 28
Tài liệu tham khảo........................................................................................................................ 28


Chương 1: Ngơn ngữ lập trình Ruby
1. Lịch sử hình thành
Ruby là một ngơn ngữ lập trình hướng đối tượng, có khả năng reflection. Cú pháp bị ảnh hưởng
từ Ada và Perl với các đặc tính hướng đối tượng của Smalltalk, và cũng chia sẻ một số đặc tính
với Python, Lisp, Dylan và CLU.
Ruby được tạo ra bởi Yukihiro “Matz” Matsumoto từ 24 tháng 2, 1993 và đưa ra bản chính thức
vào năm 1995.
Ruby chịu nhiều ảnh hưởng từ Perl, và khi hồn tất ngơn ngữ này, anh đã đùa v ới một
người bạn rằng nên đặt tên thế nào nghe cho nó giống một thứ đá quý nào đó (Perl lúc đầu cũng
được đặt tên là Pearl - ngọc trai). Và bạn của anh đã gợi ý cái tên Ruby. Sau này Matz cũng bất
ngờ khi phát hiện ra Pearl là viên đá quý tư ợng trưng cho những người sinh tháng 6, cịn Ruby
thì tượng trưng cho những người sinh tháng 7. Anh cho rằng cái tên Ruby như thế là phù hợp vì
Ruby kế thừa và phát triển nhiều đặc tính từ Perl.

Tháng 9 năm 2005, phiên bản ổn định mới nhất là 1.8.3. Ruby 1.9 (với một số thay đổi)
cũng đang trong quá trình phát triển.

2. Giới thiệu về ngơn ngữ ruby
Thay vì định nghĩa về Ruby tơi xin trích ngun văn lời giới thiệu về Ruby của cộng đồng
Ruby như sau: “Ruby là một ngôn lập trình mã nguồn mở, linh hoạt, với một sự nổi bật về sự
đơn giản dễ dùng và hữu ích. Nó có cú pháp “tao nhã” và tự nhiên dễ đọc và dễ dàng để
viết”.
Và theo như tác giả của ngơn ngữ Ruby, anh Yukihiro “matz” Matsumoto người Nhật, thì tác
giả là một người rất ưa thích các ngơn ngữ như: Perl, Smalltalk, Eiffel, Ada, và Lisp. Tác giả
đã cố gắng kết hợp một cách thận trọng các ngôn ngữ này với nhau từ đó tạo ra Ruby. Có lẽ
chính vì vậy mà Ruby là một ngơn ngữ với các câu lệnh và cú pháp khá quen thuộc khi được
học.
Một vài đặc điểm nhận thấy ở ngôn ngữ Ruby là:



Ruby có cú pháp ngắn nhưng có thể làm được nhiều việc.
Ruby là ngôn ngữ rất hướng đối tượng.

3. Xem mọi thứ như hướng đối tượng
Với Ruby, mọi thứ đều là một đối tượng. Mọi bit thông tin hay code đều có thể được đưa ra
cho chính chúng việc sở hữu các thuộc tính hay hành động. Trong lập trình hướng đối
tượng thì các thuộc tính gọi là các biến thực thể (instance variables) và các hành động gọi
là các phương thức. Ruby là một hướng đối tượng “tinh khiết”, điều này có thể thấy bằng
một bit của code mà thực hiện một hành động với một con số. Số 5 cũng được coi là một đối


tượng và có phương thức làm times. Đoạn code dưới sẽ in ra 5 lần dòng “We *love* Ruby”:
5.times{ print "We *love* Ruby" }

Đa số các ngôn ngữ khác, con số và một số kiểu dữ liệu nguyên thủy khác thì khơng được coi
là hướng đối tượng. Nhưng Ruby theo sự ảnh hưởng lớn của ngôn ngữ Smalltalk bằng việc
đưa ra các phương thức và thực thể biến tới tất cả các kiểu của nó. Điều này tạo nên sự thống
nhất và dế dàng khi sử dụng Ruby với tất cả các đối tượng.

4. Ruby là một ngôn ngữ mềm dẻo và linh hoạt
Ruby được coi là một ngôn ngữ mềm dẻo và linh hoạt, từ khi nó cho phép người dùng tự do
sửa đổi cả phần cốt lõi của nó. Các phần cốt lõi của Ruby có thể được rời đi hoặc định nghĩa
lại như ý muốn. Các phần hiện hữu có thể được thêm vào. Ruby cố gắng khơng hạn chế các
nhà lập trình.


Chương 2: Ngơn ngữ Ruby
Trong chương này sẽ nói qua tổng thể những vấn đề cơ bản với Ruby. Các bạn sẽ hiểu những
cái cơ bản nhất về Ruby. Và các bạn có thể thao tác cơ bản với những vấn đề của ngôn ngữ
Ruby.

1. Biến trong ruby
Biến của ruby không cần khai báo kiểu. Khi gán giá trị cho biến nó sẽ tự động nhận kiểu, nhận
các giá trị cho biến.
Ví dụ:
User =”user”
Puts user => user
Khai báo biến của ruby làm cho ngôn ngữ trở lên linh hoạt hơn.
Biến tồn cục của ruby: khi thêm @ trước biến thì nó trở thành biến tồn cục để sử dụng khi tác
động trong chương trình.
Cịn khi khơng có @ thì nó là biến địa phương chỉ được sử dụng trong một phần nào đó của
chương trình.
Mỗi biến của ruby là một đối tượng. Nhờ vào vấn đề này, bạn có thể tác động đến từng vấn đề
của biến: như chuyển kiểu, ghép các biến với nhau.

Nhờ có tính chất trên các biến trong ruby có thể tương tác với nhau một cách dễ dàng. Ví dụ:
@u =”Ngon ngu”
“{#@u} lap trinh”=> “Ngon ngu lap trinh”
Cũng có thể đảo ngược chuỗi hoặc viết hoa …

2. Các dạng dữ liệu trong ruby
Ruby là một ngôn ngữ hướng đối tượng. Ở đây các thành phần dữ liệu từ số, ký tự, mảng đều
được xây dựng trên cơ sở các lớp.

2.1.

Số

Cấu trúc phân cấp dữ liệu dạng số trong Ruby: Các dang dữ liệu kiểu số được xây dựng từ lớp
Numeric. Kiểu số nguyên: Integer có hai dạng là Fixnum với độ dài 31 bits và Bignum có độ
dài tùy ý. Kiểu số thực được thể hiện qua lớp Float. Bên cạnh đó một số kiểu dữ liệu khác
khơng có sẵn nhưng được đinh nghĩa trong thư vi ện chuẩn của Ruby.

2.2.

Ký tự

String là lớp dùng để thể hiện chuỗi ký tự. Khác với Java String trong Ruby là “mutable” .
String trong Ruby có thể được khai báo trong dấu ngoặc đơn hoặc ngoặc kép. Với dạng chuỗi
được đặt trong dấu nháy đơn ‘’ thì ký t ự \ chỉ có ý nghĩa khi sau nó là ký tự \ hoặc ‘. Bên cạnh


đó chuỗi trong nháy đơn được viết xuống dịng thì nó sẽ được hiển thị thành nhiều dịng tương
ứng.
Với dạng chuối trong dấu nháy kép “” thì nhiều ký tự đặc biệt được hỗ trợ, ví dụ như \n, \t như

trong java. Bên cạnh đó chuối trong dấu nháy kép cịn có thể hiện thị kết quả của biểu thức
trong nó thơng qua ký tự #.

3. Mảng trong ruby
Mảng có thể khai báo trực tiến hoặc thông qua đối tượng Array.
Ví dụ:
Arr= [1,2,3,4,5,6]
Arr= Array.new
Cách đánh chỉ số mảng trong Ruby được đánh từ 0 đến số phần tử -1.
Ruby việc sắp xếp các thành phần mảng khá linh hoạt và mềm dẻo.
Ta có thể khai báo mảng một chiều gồm các phần tử đơn: arr = [1,2,3,4,5,6].
Hoặc mảng lồng: arr = [[1,2],[3,4,5,6],[7,8,9]].
Hoặc mảng được trích xuất subArr = arr[0,2]#subArr = [[1,2],[3,4,5,6]].
Các mảng có thể tương tác với nhau thơng qua các tốn tử như +,-,*…
Với phép + ta có thể cộng hai mảng với nhau: ar= [1,2,3] +[4] # ar=[1,2,3,4]
Với phép trừ các phần tử mảng ở mảng trừ sẽ loại bỏ các phần tử có trong mảng bị trừ.
ar= [1,2,3] -[2] # ar=[1,3]
Với phép nhân, ta có thể nhân một mảng với một số và kết quả cho ta số phần tử mảng được lặp
lại theo giá trị được nhân: ar= [1,2,3]*2 # ar= [1,2,3,1,2,3]
Các mảng có thể đính thêm phần tử với phép toán <<: ar= [1,2,3]<<4 # ar= [1,2,3,4]
Và các phép so sánh: |, &. Với | các giá trị trùng lặp của hai mảng sẽ được bỏ đi ( kể cả các
phần tử trùng lặp trong 1 mảng. ar = [1,2,2,4,3,4] | [] # ar[1,2,4,3]. Trong khi đó với phép tốn
& các phần tử trùng nhau được giữ lại ( và không lặp). ar = [1,2,2,4,3,4] & [4,4] # ar[4]

4. Cấu trúc điều khiển trong ruby
if <<điều kiện>>
<>
end
<> if <<điều kiện>>
if-else

if <<điều kiện>>
<>
else
<>


end
elsif
if <<điều kiện>>
<>
elsif<<điều kiện>>
<>
elsif<<điều kiện>>
<>
end
unless
unless <<điều kiện>>
<>
end
unless cũng có th ể được sử dụng với else như trường hợp của if.
case
Case trong Ruby không lằng nhằng như trong java ( quên break là cả một vấn đề rồi). Ở đây có
thể sử dụng cấu trúc elseif để đưa ra khối điều khiển giống như trong khối điều khiển case, tuy
nhiên cú pháp case vấn thường được sử dụng nhiều hơn.
case
when <> then <>
when <> then <>
when <> then <>
end
Chú ý là ở đây nếu có nhiều hơn một điều kiện đúng thì hành đ ộng của điều kiện đầu tiên sẽ

được thực hiện
Ví dụ
x=1
a=case
when x>0 then
puts "x is 1"
puts "hehe"
when x==2 then puts "x is 2"
when x<3 then "three"
end
puts a
Kết quả sẽ là
x is 1


hehe
nil
* cấu trúc ?: trong Ruby giống như trong java nhưng được mô tả như cấu trúc if với ? là then và
: là else
Ruby cũng cung cấp hỗ trợ một số từ khóa hỗ trợ điều khiển cấu trúc chương trình như: return,
break, next …

5. Vịng lặp trong ruby
5.1.

While

While<> do
<>
End

5.2.

Util

Util <<condition>>do
<<actions>>
End

5.3.

For

for <<variables>> in <<collection>> do
<<actions>>
end
5.4.

begin
<>
while

Cấu trúc liệt kê

+ Với đối tượng số
upto/downto
0.upto(9){|s| print s}
times
10.times{|s| print s}
step
0.step(9,1){|x| print x}

+ Với Array, Range
each
(1..9).each{|s| print s}
Result: 123456789
collect
result = (2..4).collect{|s| s*s*s}

begin
<<actions>>
end
Util<<conditions>>


puts result
Result:
8
27
64
select
positive = [1,-2,3,4,-9].select{|s| s>0}
puts positive
Result:
1
3
4
reject
negative = [1,-2,3,4,-9].reject{|s| s>0}
puts negative
Result:
-2

-9
5.5.

Hash

Mảng Hash cũng khơng có gì đ ặc biệt so với các mảng thơng thường. Thay vì mảng Array chỉ
chấp nhận các chỉ số (index) là dạng Integer thì mảng Hash chấp nhận bất kỳ Object nào vẫn
được xem như một chỉ số
Ví dụ: với mảng Array
persons = ["Ho Chi Minh","Nhan vat lich su","yeu nuoc"]
Giả sử nếu muốn biết chính xác tên nhân vật là gì, xếp loại nhân vật, tính cách là gì ,… thì phải
cần tới class Hash
persons = {
"ten"=>"Ho Chi Minh",
"xep loai"=>"Nhan vat lich su",
"tinh cach"=>"yeu nuoc"
}
Với mảng Hash, ta có persons[xep loai] = "Nhan vat lich su"
Mảng Hash không sử dụng chỉ số (index) để truy vấn dữ liệu mà sử dụng từ khóa (clef) để liên
kết với dữ liệu liên quan
Mảng Hash cũng giống như mảng Array nên được thừa hưởng phương thức each
persons = {


"ten" => "Ho Chi Minh",
"xep loai" => "Nhan vat lich su",
"tinh cach" => "yeu nuoc"
}
persons.each do |clef,value|
puts clef + "=>" + value

end
5.6.

Có một vấn đề trong đây là Blocks

Trong quá trình sử dụng các cấu trúc liệt kê, chúng ta thường thấy một nhóm các câu lệnh nằm
trong cặp ngoặc nhọn hoặc trong long khối begin/end. Người ta gọi đó là block. Thông
thường block bao giờ cũng được thực hiện sau lời gọi hàm
Ví dụ:
10.downto(0){|x| print x}
Ở đây khối |x| print x được thực hiện sau lời gọi hàm và đó là block. Theo quy ước thì với với
block trong phạm vi một dòng ta nên dùng ngoặc nhọn còn với block có nhiều dịng ta nên sử
dụng do .. end
Chú ý là trong block, giá trị trả về được thông qua câu lệnh next chứ không phải là return (chỉ
trả về giá trị cho hàm đóng).
Cấu trúc hàm trong Ruby
def <> (<>)
Ví dụ:
def squareRootOf(n,loop)
ini = n/2
loop.times {ini = (n/ini + ini)/2}
return ini
end
Một điểm đặc biệt ở đây là nhiều giá trị có thể đồng thời được trả về trong một phương thức.
Các giá trị trả về sẽ được tập hợp trong một mảng.
Ví dụ:
def multiValuesReturn()
return 1
end
arr = multiValuesReturn

arr.each {|x| print x}
procs và lambdas


procs và lambdas là hai cách thức để đưa blocks vào trong đối tượng. Tùy thuộc vào cách mà
đối tượng được tạo ra ta sẽ có procs haylambdas.
Tạo procs
def createProcs(&p)
p
end
exp = createProcs{|x,y| x**y}
Hoặc
exp = Proc.new{|x,y| x**y}
Gọi procs
puts exp.call(2,3)
Tạo lambdas
incre = lambda{|x| x+1}
hoặc
incre= ->(x){x+1} # ruby version 1.9
hoặc
incre=->(x;step=2){x+step} # Một tham số x và biến nội bộ step
Gọi lambdas
puts incre.call(2)
Closures
Closures là một khái niệm chỉ một hàm sử dụng một biến giới hạn. Thơng thường closures dùng
để nói đến hàm lồng. Ở đó hàm bên trong sử dụng biến được khai báo bởi hàm chứa nó. Ở
Ruby, khái niệm này thường được thể hiện bởi các khối lambdas hoặc procs.
Ví dụ
def mainFunction(n,m)
lambda{|x| x*n/m}

end
myLambda = mainFunction(2,4)
puts myLambda.call(2)
Kết quả ở đây là 1

6. Lớp và modules
Là một ngôn ngữ hướng đối tượng, khái niệm lớp là thành phần cơ bản trong Ruby. Lớp được
khai báo như sau:
class <<name_of_class>>
<<body_of_class>>
end


Khới tạo class
<<name_of_class>>.new
Hàm khởi tạo trong lớp. ( giống như hàm tạo và khởi tạo giá trị trong java)
def initialize(<<var1>>,<<var2>>)
<<khới tạo các giá trị>>
end
Đối với các hàm việc xác định khả năng truy cập được thơng qua các từ
khóa public , private, protected giống như Java. Tuy nhiên ở Java chúng ta có thêm default và
được coi như mặc định trong khai báo còn ở đây public được coi là mặc định trong khai
báo. Public cho phép các hàm được truy nhập từ bất kỳ đâu trong khi private chỉ cho các hàm
được truy nhập từ các thành phần khác trong lớp đó và các lớp con của
nó, protected giống private chỉ khác ở chỗ các hàm protected có thể được gọi bởi các thực thể
của chính lớp đó hoặc với sefl.
class Test
private
def myTest()
puts "test"

end
protected
def proTest()
puts "pro"
end
public
def testTest()
theTest = Test.new
theTest.proTest()
end
def testPrivate()
theTest = Test.new
theTest.myTest()
end
end
a = Test.new
a.testTest()# =>pro
a.testPrivate()#=> error in red as below
Kết quả:
pro


HelloWorld.rb:20:in `testPrivate': private method `myTest' called for #(NoMethodError)
from HelloWorld.rb:28
Bên cạnh đó ở Ruby các biến trong lớp đều được đặt là private, trong khi các hằng số đều
là public.

7. Thừa kế trong Ruby
Là ngôn ngữ hướng đối tượng nên Ruby có đầy đủ các tính chất như tính đa hình, đóng gói…
và kế thừa

class Parent
def printOut
puts "This is Parent class"
end
end
class Child <>
def printOut
puts "This is Child Class"
end
end
Modules
Modules là nhóm các thành phần hàm, biến, hằng số và chạy độc lập
module MyModule
def MyModule.intro
puts "This is the intro of modul"
end
def MyModule.sayHello
puts "Hello"
end
end
class MyClass
include(MyModule)
def sayHello
MyModule.sayHello
end
end
myClass = MyClass.new
myClass::sayHello



Một chương trình có th ế gồm nhiều file, và với ngơn ngữ script như Ruby thì vi ệc phân chia
chương trình thành các file chứa các module khác nhau.Các file này sau đó có thể được sử dụng
thơng qua lời gọi require hoặc load trong chương trình chính.


Chương 3: Framework Rails
Đến với chương này các bạn có thể biết được thế nào là một framework, mơ hình kiến trúc của
nó, những đặc điểm của framework Rails và những đánh giá của nó với các framework khác.

1. Thế nào là framework
Framework là những thư viện code, được thiết kế để giúp đỡ trong việc phát triển phần mềm.
Framework tạo ra một bộ ứng dụng thiết kế dựa vào những thư viện phát triển theo ngôn ngữ
để tạo người lập trình dễ dàng để phát triển những phần mềm một cách nhanh nhóng và hiệu
quả.
Khi phát triển một phần mềm dựa vào một framework nào đó thì vi ệc phát triển nó trở lên thuận
lợi với người lập trình bởi vì nó giảm bớt thời gian tập trung vào việc code hơn để có thể tập
trung vào việc giải quyết những vấn đề liên quan đến logic điều đó làm tăng hiệu quả của người
lập trình.

2. Mơ hình MVC
Ngày này các framework về thiết kế website hầu như đều sử dụng mơ hình MVC để phát triển.
vậy mơ hình này có những đặc điểm gì mà các framework đư ợc sử dụng nó để phát triển như
vậy?
2.1.

Khái quát về mơ hình MVC

MVC là viết tắt của Model – View – Controller. Nó là một kiến trúc phần mêm hay mơ hình
thiết kế được sử dụng trong kỹ thuật phần mềm, giúp cho người lập trình tách ứng dụng của họ
thành ba thành phần khác nhau Model, View và Controller. Mỗi thành phần có một nhiệm vụ

riêng biệt và độc lập với thành phần khác.
2.2.

Các thành phần của mơ hình MVC

Dưới đây là sơ đồ của mơ hình MVC:


Các thành phần trong mơ hình MVC có mỗi quan hệ chặt chẽ với nhau. Các thao tác của nó
được lặp lại mỗi khi tiếp nhận yêu cầu của người dùng.
Như hình trên có th ể thấy mơ hình MVC gồm 3 thành phần chính: Model, View và Controller.
Model:
Gồm mọi hoạt động liên quan đến cơ sở dữ liệu, các thao tác với cơ sở dữ liệu đều được thực
hiện ở đây gồm: chuẩn hóa, phân tích đánh giá…
View:
Phần này liên quan đến người dùng. Nó là phần hiển thị với người dùng. Nó đưa thơng tin cụ
thể đến với người dùng một cách cụ thể nhất. Và nó cũng nhận tương tác giữa người dùng và hệ
thống .
Controller
Controller chịu trách nhiệm phân phối ứng dụng. Nó nhận sự kiện từ bên ngoài, rồi tương tác
với Model để xử lý thông tin. Sau khi xử lý tác động liên quan đến hệ thống thì nó truyền đến
View để hiển thị với người dùng.
Như vậy dễ dàng thấy rằng sự tương tác giữa các thành phần trong mơ hình đều thơng qua
controller. Controller là cầu lối giữa View và Model. Nó điều khiển dữ liệu rồi sau đó đưa ra
những thơng tin cần thiết cho người dùng.
2.3.

Ưu và nhược điểm của mơ hình MVC




Ưu điểm của mơ hình MVC:
Mơ hình MVC làm tăng khả năng phát triển và mở rộng ứng dụng.




Mơ hình MVC khiến cho việc bảo trì trở lên dễ dàng hơn: vì các thành phần phụ thuộc
thấp với nhau, vì vậy khi thay đổi một cái thì khơng ảnh hưởng đến cái khác.



Các thành phần trong mơ hình MVC đư ợc sử dụng lại: ví dụ một model có thể sử dụng
cho nhiều phần hiển thị và ngược lại cũng vậy.

Mơ hình MVC có thể phân tán: sự chia sẽ cách biệt về code giữa các thành phần có ý
nghĩa là mỗi thành phần trong chúng có thể ở trên một máy tính riêng, nếu thấy cần thiết.

Nhược điểm của mơ hình MVC: Đối với dự án nhỏ áp dụng mơ hình MVC gây cồng
kềnh, tốn thời gian trong quá trình phát triển và tốn thời gian luân chuyển qua các tầng.

3. Ruby on Rails
3.1.

Nguồn gốc của Rails

Đầu tiên, tôi muốn giới thiệu với các bạn nguồn gốc hình thành framework Ruby on Rails.
Rails ra mắt công chúng lần đầu tiên vào năm 2004, Rails thoạt đầu được dùng như là nền
tảng cho một công cụ quản lý dự án được đặt tên là Basecamp và được tạo ra bởi nhà
phát triển web David Heinemeier Hansson, một nhân viên của công ty phát triển web

37signals (Mỹ). Ban đầu họ xây dựng Rails khơng phải với mục đích là xây dựng ra một
framework riêng, chủ tâm ban đầu là dùng nó để xây dựng các ứng dụng khác của 37signals.
Sau đó Heinemeier Hansson thấy tiềm năng của nó giúp cho anh ấy làm các công việc dễ dàng
hơn bằng cách rút ra các tính năng phổ biến như trừu tượng cơ sở dữ liệu và khn
mẫu(template) bên trong, và sau đó nó trở thành phiên bản đầu tiên được tung ra của Ruby on
Rails.
Trên thực tế Rails được rút trích từ Basecamp, một chương trình mà được cộng đồng Rails
cho là trong quá trình làm chương trình đó thì đã gặp và giải quyết được rất nhiều các vấn đề
phức tạp. Và Rails, một framework bắt nguồn từ chương trình đó thì nó đã thừa kế được
những sức mạnh từ dự án đó. Vì vậy Rails ln sẵn sàng có thể giải quyết được các vấn đề
thực tế tồn tại trong quá trình phát triển web. Ngoài ra, ban đầu Rails được xây dựng ra cịn với
mục đích là để xây dựng các ứng dụng khác từ nó, bởi vậy Rails trước khi xuất hiện trên
thế giới thì nó đã chứng minh được bản thân nó là một framework rất hữu dụng, chặt chẽ và
toàn diện.
Sau khi phiên bản đầu tiên được tung ra thì cộng đồng Rails cũng đã đóng góp bổ sung
hàng mở rộng nó, và sửa các lỗi được tìm thấy. Và phiên bản mới nhất của Rails bây giờ là
phiên bản 2.0.2.
3.2.

Mơ hình MVC với Rails

Hiện nay mơ hình MVC đang được sử dụng hầu hết các framework phát triển ứng dụng web.
Rails cũng không là ngo ại lệ. Rails dự trên mơ hình MVC đ ể phát triển framework của mình.
Cấu trúc của mơ hình MVC rất rõ ràng. Điều này làm cho người lập trình đẽ dàng phát triển
ứng dụng của mình.
Hiện tại chương này giới thiệu những vấn đề cơ bản của Rails nên mình chỉ nói sơ qua phần này


ở đây để làm rõ đư ợc mơ hình mà framework xử dụng. Cịn về các mục sau mình sẽ làm rõ
những tác động cụ thể của mơ hình MVC đối với Rails.

3.3.

Tự động sinh code trong Rails

Ta cũng có thể nói đến Rails với việc sinh code tự động. Khi bạn phát triển trên Rails, có
các thư mục hay file là nơi để bạn điền code vào, và tất cả các phần trong ứng dụng của bạn
tương tác với nhau trên một cách thức chuẩn. Hay nó đã chuẩn bị sẵn một bộ khung
chương trình trước cho bạn, điều này giúp bạn đơn giản là chỉ việc điền các đoạn code login
vào trong ứng dụng và tích kiệm và giảm tải cơng việc của bạn. Và nhờ có bộ khung đã định
nghĩa sẵn này, Rails cung cấp các generate, rake, script cho phép bạn nhanh chóng tạo, xóa ra
một số template để bạn định nghĩa model, view ,controller, hay ngay cả database trong cơ sở
dữ liệu.
3.4.

Vòng đ ời phát triển một ứng dụng trong Rails

Rails động viên sử dụng các điều kiện khác nhau cho mỗi giai đoạn trong chu trình vịng đời
của ứng dụng(phát triển,kiểm tra, và sản phầm). Nếu bạn đã hoàn thành việc phát triển ứng
dụng web trong một khoảng thời gian, đây có lẽ là cách để bạn thực hiện. Rails chỉ hợp thức
hóa các môi trường này.
Development trong điều kiện development, thay đổi tới code nguồn của ứng dụng ngay lập
tức; tất cả chúng ta cần làm là load lại trang tương ứng trong trình duyệt. Tốc độ khơng phải
là yếu tố quyết định trong điều kiện này; Thay vì vậy, mục tiêu là cung cấp cho người
phát triển nhìn xuyết suốt các thành phần có liên quan đến việc hiển thị trên mỗi trang web.
Khi một lỗi xảy ra trong điều kiện phát triển, các nhà phát triển có thể nhìn thống qua để biết
dòng code nào gây ra lỗi, và như thế nào dịng đó được gọi tới. Khả năng này được cung cấp
bởi stack trace(bao gồm đầy đủ các danh sách các phương thức gọi để chuẩn bị cho lỗi),
cái này được hiển thị khi một lỗi không trông đợi xảy ra.
Test Trong điều kiện kiểm tra, chúng ta thường làm mới(refresh) cơ sở dữ liệu với một
ranh giới của dữ liệu giả cho mỗi lần kiểm tra được lặp lại-điều này đảm bảo rằng kết quả

của cuộc kiểm tra là nhất quán, và cách xử lý đó là có khả năng tăng thêm. Unit và các thủ
tục kiểm tra là tự động hóa hịan tồn trong Rails. Khi chúng ta kiểm tra ứng dụng Rails,
chúng ta khơng xem nó sử dụng một trình duyệt web truyền thống. Thay vì vậy, các cuộc
kiểm tra được gọi từ các dòng lệnh, và có thể chạy dưới background. Điều kiện kiểm tra
cung cấp một môi trường chuyên dụng để xử lý các hoạt động đem lại hiệu quả.
Production Giai đoạn mà ứng dụng của bạn đã hoàn thành, khi mà các kết quả kiểm tra là
tốt, các lỗi đã được loại ra. Khi đó việc thay đổi code là rất hiếm, điều này có nghĩa là mơi
trường sản phẩm có thể lạc quan để tập trung vào việc sử dụng. Nhiệm vụ như viết số lượng
lớn các log cho mục đích gỡ rồi là trở nên không cần thiết khi này. Tuy nhiên, nếu một lỗi


xảy ra, bạn không muốn làm người dùng sợ hãi với những thơng báo dấu vết khó hiểu(nó chỉ
tốt trong giai đoạn phát triển).
Với các nhu cầu khác nhau cho mỗi điều kiện,giai đoạn, Rails lưu trữ dữ liệu cho mỗi điều
kiện trong các dữ liệu được tách biệt hoàn toàn. Bởi vậy, tại bất kỳ thời điểm nào, bạn có
thể có:


Dữ liệu trực tiếp với người dùng thực sự tương tác trong môi trường điều kiện
sản phẩm.



Một bản copy của dữ liệu trực tiếp mà bạn sử dụng để gở rối lỗi hay phát triển
tính năng mới trong mơi trường điều kiện phát triển.

 Một bộ dữ liệu kiểm tra để mà bạn có thể liên tục làm việc load lại trong môi trường
điều kiện kiểm tra.
3.5.


So sánh Ruby on Rails với Java và PHP

Để đánh giá một framework, người ta sẽ dựa vào 4 yếu tố: tốc độ phát triển (Dev Speed), khả
năng bảo trì (maintainability), cơng cụ hỗ trợ (Dev Tools)và khả năng mở rộng thay đổi
(Scaling). Như vậy theo lược đồ đánh giá trên, có thể thấy mỗi framework có những điểm mạnh
– yếu riêng. Với RoR, đó là tốc độ phát triển và khả năng bảo trì. Vậy đâu mới là yếu tố quan
trọng nhất trong 4 yếu tố trên để đánh giá một framework nên được sử dụng nhất. Theo như
Tim Bray và nhiều chun gia, thì đó là tính bảo trì, bởi một ứng dụng khi được xây dựng thì đa
số nó sẽ được sử dụng trong thời gian dài, hơn thế nữa thực tế cho thấy chi phí cho cơng tác bảo
trì luôn là không nhỏ. Mặt khác, với sự hỗ trợ của mơ hình MVC, độ dễ hiểu và độ dài của code
cũn g được cải thiện hơn so với PHP và Java.


Ngồi 4 yếu tố trên, có thể nêu thêm các yếu tố cụ thể sau ảnh hưởng tới tầm quan trọng của
RoR so với các framework khác. Đó là ở giải pháp mã nguồn mở và khả năng thương mại. Với
giải pháp mã nguồn mở, RoR đã dung hịa tính dễ học của PHP và cấu trúc chặt chẽ của Java.
Còn về khả năng thương mại, các nền tảng J2EE và .NET hiện đang được sử dụng trong các
công ty lớn với tính năng ổn định và sự an tồn chặt chẽ trong việc quản lý khối lượng lớn dữ
liệu. RoR có thể đảm bảo nhiệm vụ tương tự với giá thành hạ.


Chương 4: Cài đặt và phát triển môi trường Rails
Như chương trước đã đề cập đến vấn đề framework nói chung và một số những điều cơ bản liên
quan đến framewoerk Rails. Chương này đề cập đến các cài đặt để phát triển một môi trường để
học cũng như đ ể chạy ngôn ngữ trên Rails.

1. Các môi trường cụ thể để phát triển Ruby on Rails
Hầu như mọi môi trường đều có thể phát triển framework. Bạn có thế cài đặt nó trên hệ điều
hành Window, Linux và Mac.
Nhưng hiện nay học tập và phát triển một trang web các nhà lập trình thường sử dụng Linux

hoặc Mac.
Để có một server để thực thi một hệ thống phát triển bằng Rails người phát triển thường chọn
sever Linux.

2. Cách cài đặt môi trường phát triển Ruby on Rails
Ở đây tôi hướng dẫn các bạn cài đặt môi trường phát triển Rails trên Windown
B1: Truy cập vào trang web railsinstaller.org và download gói “web the kit “.
B2: Chọn cài đặt gói vừa tài về bằng kích đúp vào .Chọn next sau đó là chọn install chương
trình.
B3: Bỏ tích đánh dấu khỏi dòng “Configure git and ssh when installation has completed”và
chọn finish.
B4: Từ màn hình cmd bạn gõ: rails new project1 ấn enter.
B5: Di chuyển vào thư mục project1 và gõ: rails s và enter.
B6: Bạn dùng trình duyệt bất kỳ gõ vào địa chỉ: “localhost:3000” nếu màn hình nếu màn hình
hiển thị “welcome aboard” tức là bạn đã cài đ ặt thành công.

3. Cài đặt công cụ hỗ trợ code
B1: Bạn download công cụ sublimetext tại trang />B2: Cài đặt sublimetext .
B3: Sau khi cài đặt xong sublimetext ta di chuyển vào thư mục đã cài đặt mặc định là:
C:\Program Files\Sublime Text 2
B4: Copy file sublime_text.exe vào chính thư mục đó và đổi tên là “subl”
B5: Copy đường dẫn thư mục chứa file “subl”.


B6: Kích phải chuột vào "My Computer", chọn "Advanced System Settings", chọn
"Environment Variables", kéo xuống và tìm "Path", chọn "Edit". Thêm ";" vào cuối của dòng và
dán đường link vừa rồi vào đó.
B7: Khởi động lại Command line và chọn đường dẫn project : gõ “subl” để mở Sublime text.
Khi hoàn thành xong các mục trên bạn đã t ạo thành công môi trường phát triển và công cụ hỗ
trợ code. Đến đây bạn có thể học và phát triển một ứng dụng web bằng framework Rails.

Bây giờ khi đã hồn thành mơi trường phát triển và có những kiến thức cơ bản về ngơn ngữ
Ruby thì bạn có có thể tìm hiểu những vấn để phát triển Ruby on Rails
Cịn nếu khi bạn muốn thực thi mơi trường Rails trên một hệ thống khác bạn có thể xem thêm
tại mục 3 của tài liệu kham khảo.


Chương 5: Những vấn đề cụ thể của Rails
1. Bộ công cụ để phát triển
Rake: là một công cụ xây dựng viết bằng Ruby, Có một sự khác biệt lớn giữa Rake và những
công cụ khác.Tất cả các công việc được viết bởi chính ngơn ngữ Ruby. Vì vậy, nó được thừa
hưởng tính linh hoạt, đầy đủ và có thể tận dụng lợi thế của một số tính năng tốt của Ruby.
Cài đặt: Để cài đặt Rake, từ cmd ta gõ lệnh : “ gem install rake “ và enter .
Chức năng:
 Rake hỗ trợ các mơ hình quy tắc tổng hợp các nhiệm vụ ngầm.
 Người dùng có thể xác định các nhiệm vụ với điều kiện tiên quyết.
 Một thư viện các nhiệm vụ đóng gói sẵn để thực hiện xây dựng rakefiles dễ dàng hơn.
 FileLists khá linh hoạt hoạt động như mảng nhưng vẫn hiểu các thao tác tên tập tin và
đường dẫn.
Các hỗ trợ nhiệm vụ : Di chuyển đến thư mục cần kiểm tra , gõ lệnh : rake --tasks
+ Mỗi một danh sách các nhiệm vụ có sẵn của rake tạo ra phụ thuộc vào thư mục bạn kiểm tra.
+ Các nhiệm vụ thường là liên quan đến database, xóa sửa tạo mới, clean bộ nhớ cache.
Các hỗ trợ nhiệm vụ chính:
+ rake about: Thông tin về các phiên bản cũng như cài đặt phiên bản đang cài sẵn trên máy
bạn để tiện cho việc chỉnh sửa , update .
+ rake assets: Có 2 chức năng là clean để xóa bỏ những assets đã compiler , và compiler những
assets hiện tại .
+ rake db: Tổng hợp các nhiệm vụ có sẵn của rake với database như tạo, xóa sửa , rollback…
rất hữu ích khi xử lý xự cố với db.
+ rake doc: là một công cụ hỗ trợ việc tạo ra những tài liệu hướng dẫn cho các ứng dụng của
bạn, tài liệu API .Nó được tách ra để làm cho code của bạn trở lên đơn giản.



rake doc:app : Tạo ra các tài liệu hướng dẫn cho các ứng dụng của bạn trong doc/ app.



rake doc:guides : Tạo ra các hướng dẫn rails trong doc/guides .



rake doc:rails : Tạo ra các hướng dẫn rails api trong doc/api.


rake doc:plugins : Tạo ra các tài liệu api cho tất cả các plugin được cài
doc/plugins.


rake doc:clobber_plugins : Loại bỏ tất cả các tài liệu tạo ra cho plugins.

trong


+ rake notes : Hàm tìm kiếm thơng qua code của bạn và bắt đầu với các từ khóa FIXME,
OPTIMIZE or TODO . Nó có thể tìm kiếm trong các file có phần mở rộng .builder, .rb, .erb,
.haml and .slim.
+ rake routes: Cung cấp tất cả các đường dẫn và định tuyến có sẵn trong code của bạn để bạn
có thể hình dung về tổng thể .
+ rake test: Cơng cụ có sẵn unit, nó hỗ trợ tạo ra các bản test có sẵn và kiểm tra tính ổn định
của ứng dụng.
+ rake tmp: trong rails ta có file “Rails.root/tmp” để lưu trữ các file tạm , process id đang dùng

và các hoạt động đã di ễn ra. Rake tmp hỗ trợ dọn dẹp file này để giải phóng bộ nhớ.


rake tmp:cache:clear : xóa bỏ tmp/cache



rake tmp:sessions:clear : xóa bỏ tmp/session.



rake tmp:sockets:clear : xóa bỏ tmp/sockets



rake tmp:clear : xóa tồn bộ cả 3 file trên .

Bundler: Bundler là một công cụ duy trì một mơi trường phù hợp cho mã code của một nhà
phát triển trên tất cả các dòng máy. Khi mã code của một nhà phát triển được triển khai trên các
máy khác nhau, những thư viện trước đây của nhà phát triển có thể thay đổi theo môi trường đi
cùng máy. Điều này phá vỡ ứng dụng của nhà phát triển. Bundler đảm bảo rằng các thư viện sẽ
vẫn như cũ, ghi hình t ất cả mọi thứ lại với nhau để phát triển ứng dụng chạy rất tốt trên mỗi
máy, nơi mà nó được triển khai.Ở đây bundler giúp ta quản lý và sử dùng gem trực tiếp trên
Rubygems.org hoặc một số trang khác .
Gem: là một gói thư viện của Ruby.
Cài đặt bunlder:
B1 : Trong thư mục gốc của app , chọn gemfile và tùy chỉnh cài đặt theo mong muốn , chọn
những gói gem hỗ trợ app của mình như “jQuery JavaScript library”, giao di ện Ruby cho
SQLite database….Bằng cách xóa ký tự # trước những gói cần thiết và thêm phiên bản của
những gói đó. Hoặc bạn có thể tìm những thư viện của để cài đặt trong Gem.

B2: Sau khi lưu file Gem bạn có thể dùng lệnh bundle install để cài đặt nó vào ứng dụng của
mình. Và tiến hành sử dụng thư viện đó.

2. Đặc điểm cơ bản với cơ sở dữ liệu của Ruby on Rails
Rails là một Framework hỗ trợ khá đầy đủ các các ứng dụng liên quan đến quản trị cơ sở dữ
liệu (csdl) như xampp, wamp ...Trong quá trình phát triển của Rails, bản thân Rails cũng đã tr ừu
tượng hóa csdl thơng qua một tầng liên kết là Active record . Đây là một thành phần cho phép


×