12/08/2018, 15:00

10 mẹo hữu ích cho các lập trình viên Ruby on Rails (RoR)

Rails là một framework web theo mô hình MVC được viết trên ngôn ngữ lập trình Ruby. So với các framework khác thì Rails có lợi thế lớn hơn rất nhiều, nó có giá trị quy ước về cấu hình. Nếu bạn tuân theo các quy ước đúng, bạn có thể tránh được các tập tin có cấu hình dài dòng, chỉ cần những thứ cần ...

Rails là một framework web theo mô hình MVC được viết trên ngôn ngữ lập trình Ruby. So với các framework khác thì Rails có lợi thế lớn hơn rất nhiều, nó có giá trị quy ước về cấu hình. Nếu bạn tuân theo các quy ước đúng, bạn có thể tránh được các tập tin có cấu hình dài dòng, chỉ cần những thứ cần cho công việc. Bạn sẽ tiết kiệm thời gian viết những file cấu hình nhàm chán để dành nhiều thời gian tập trung vào logic nghiệp vụ.

Ngày nay, Rails rất được yêu thích và được sử dụng phổ biến khắp mọi nơi trên thế giới. Nhưng đừng nhầm tưởng nó là giải pháp hoàn hảo tuyệt đối cho mọi vấn đề.

Dưới đây sẽ là 10 mẹo hữu ích về ý tưởng và tài nguyên cho người phát triển Ruby on Rails. Nếu có ý tưởng gì hay, bạn hãy comment đề xuất của mình vào bên dưới bài viết nhé (yeah)

Rails có một cấu trúc plug-in được xác định rõ ràng, giúp cho bạn dễ dàng cài đặt và sử dụng trong ứng dụng của mình. David Heinemeier Hansson, cha đẻ của Rails, cho biết anh ấy sử dụng 5-6 plug-in trong mỗi ứng dụng Rails của mình.

Một nguyên tắc vàng dành cho lập trình viên : "the best code is no code at all". Tôi thì không giỏi tiếng Anh cho lắm nên tôi hiểu câu nói này đại loại kiểu như code tốt nhất không phải là code tất cả mọi thứ, hoặc nó cũng có nghĩa nôm na với câu nói "viết một lần, chạy mọi nơi" . Để việc phát triển trong Rails có năng suất cao thì một phần là nhờ vào việc chúng ta không cần phải viết hết tất cả các mã cho một chương trình mà có một người nào đó trong cộng đồng dev đã viết các mã thành 1 plug-in cung cấp một chức năng nào đó mà chúng ta cần. Dưới đây là một vài cách để cài đặt plug-in trong Rails, tuy nhiên đây là cài đặt bằng tay còn đa số là chạy script để cài đặt các plug-in tự động:

# Cài đặt từ 1 git repo : plug-in hỗ trợ tính năng phân trang
script/plugin install git://github.com/mislav/will_paginate.git

# Cài đặt từ 1 url : plug-in cung cấp lịch
script/plugin install http://topfunky.net/svn/plugins/calendar_helper

Bạn có thể tiết kiệm rất nhiều thời gian và rắc rối nếu bạn có kỹ năng tìm kiếm trên Web tốt (đặc biệt là GitHub). Một vài địa chỉ tốt để tìm các plug-in như Core Rails, Railsify và Rails Plug-in Directory. Bạn cần phối hợp với một API có sẵn hoặc tiêu thụ một số loại dữ liệu có định dạng chuẩn, hoặc cần gắn thẻ, phân trang hoặc sử dụng một tính năng phổ biến nào khác của ứng dụng web? Khả năng cao là đã có lập trình viên RoR nào đó viết sẵn các tính năng đó thành các plug-in để bạn sẵn tải về và dùng.

Khi nói đến từ test, đa số mọi người thường nghĩ đến những kỷ niệm không vui với những bài kiểm tra ở trường. Mặc dù từ test ở đây mang hàm ý khác nhưng đối với cá nhân tôi thì việc test với Rspec cũng có ý nghĩ tương tự, nó để lại trong tôi ấn tượng khó quên đến tận cả sau này.

Khi mới vào công ty và trải qua kỳ trainning 2 tháng cho new dev, tôi được vào làm dự án thật và task đầu tiên được giao tôi đã đụng mặt với Rspec. Tôi có viết 1 hàm khoảng 5-6 dòng trong model sau đó đẩy pull-request như bình thường. Tôi hào hứng vì vượt qua task đầu tiên một cách "ngon lành" nhưng sau đó tôi đã nhận được comment từ team leader là viết Rspec cho hàm này vì mỗi khi bạn thêm 1 hàm hoặc phương thức mới trong model thì bạn đều phải viết Rspec cho nó. Vì trong khi trainning chúng tôi được "miễn" phần Rspec này nên tới khi gặp nó, tôi hoang mang không biết đây là cái quái quỷ gì. Tôi bắt đầu mò lại tutorial lúc trainning đồng thời mò mẫm trên mạng, hì hục mãi cũng viết được cái Rspec nhưng tới khi chạy test thì thất vọng toàn tập, cái tôi nhận được chỉ là màn hình đỏ lòm với rất rất nhiều các thông báo failure. Cố gắng trong vô vọng mãi tôi đành phải nhờ tới sự giúp đỡ của leader. Vì leader của tôi là người Nhật nên chúng tôi đành trao đổi qua ngôn ngữ trung gian là tiếng Anh, có lúc nói với nhau không hiểu thì lại phải ghi ra giấy. Làm tới đâu anh ấy hướng dẫn từng bước cho tôi đến đó, tới khi chạy pass hết tất cả Rspec, tôi sướng rơn trong người, háo hức như bắt được vàng, nhìn lại đồng hồ cũng đã gần 10h đêm, mắt hoa lên vì ngồi máy tính quá lâu.

Kể cho bạn câu chuyện trên đây không phải chỉ là để tám tào lao mà tôi chỉ muốn nhấn mạnh tới tầm quan trọng của Rspec và kỹ năng viết Rspec của dev quan trọng như thế nào. Leader của tôi có thể chọn phương án là viết spec thay tôi hoặc đổi cho tôi task khác, nhưng thay vì đó anh ấy lại kiên nhẫn ngồi lại chỉ dẫn tôi từng bước một, mong muốn của anh ấy là đã là 1 dev thì phải biết viết Rspec thành thạo.

Rspec được hiểu như là một bộ script test tự động. Nó là các chương trình trợ giúp nhỏ được viết ra để chạy những đoạn mã chính để đảm bảo rằng đoạn chương trình đó thực hiện đúng. Khi Rspec đúng, việc testing sẽ cải thiện quy trình làm việc và tăng sự tin tưởng vào các kết quả và đoạn chương trình mà bạn đã viết.

Thay vì sử dụng framwork test có sẵn trong Rails (Rails mặc định sử dụng mini test) thì vài năm trở lại đây Rpsec đã được sử dụng rộng rãi trong cộng đồng RoR, cú pháp Rspec rất rõ ràng và dễ hiểu:

#describe...end : đoạn script test một function nào đó
describe "My Cool library" do
  #before do... : trước khi chạy kịch bản thì làm gì đó, thường dùng để nhóm những thao tác chung như khởi tạo dữ liệu để code dễ đọc và đúng chuẩn hơn
  before do
    @cool = Cool.new
  end

  #should be ... : kết quả mong muốn sau khi chạy các lệnh bên trong
  it "should be full of penguins." do
    @cool.get_penguins!
    @cool.penguin_count.should == 10
  end

  it "should melt if it gets too warm"
end

Khối block chứa bối cảnh và mỗi khẳng định bên trong nó là các case (kịch bản) để giải thích code của bạn nên làm gì. Đây là giai đoạn quan trọng nhất : viết ra các khẳng định dựa vào câu hỏi "Mã này nên làm gì sau đó?"

Rspec cho phép bạn rời khỏi khối đang viết và nhanh chóng suy nghĩ tất cả các chức năng cần có, viết phác thảo các ý chính cho các chức năng này, sau đó mới quay lại và thực hiện các test khi bạn viết code. Trong thời gian chờ, Rspec sẽ xem các test này đang trong trạng thái "pending" và đưa ra cho bạn vài nhắc nhở về chúng trong quá trình chạy test của bạn. Một điều tuyệt vời nữa là khi đã có đủ các test thì chúng sẽ cho bạn thấy tất cả các code của bạn liên quan với nhau như thế nào, giúp bạn dễ dàng biết được những thay đổi gần đây của mình có ảnh hưởng thế nào tới cả chương trình (phá vỡ cái gì đó chẳng hạn). Rspec còn giúp dễ dàng tạo những vùng phủ sóng thử nghiệm tốt nhờ việc sử dụng các bộ tạo tùy chỉnh để tạo các test phù hợp với phần còn lại của code:

$ script/generate rpsec_scaffold MyModel

Khi đã kiểm tra để đảm bảo rằng các chức năng cơ bản đã hoạt động thành công, bạn có thể yên tâm thay đổi và thêm mã code mới mà không cần lo lắng về những bug không nhìn thấy được. Miễn là bạn chạy test thường xuyên, bạn sẽ biết ngay khi bạn phá vỡ (phá hỏng) một cái gì đó             </div>
            
            <div class=

0