11/08/2018, 23:21

Kiến trúc Ruby On Rails

1. Tổng Quan Ruby on Rails (RoR) là một web framework được viết bằng ngôn ngữ Ruby và tất cả các ứng dụng trong Rails sẽ được viết bằng Ruby. Ruby on Rails được tạo ra để hỗ trợ các lập trình viên việc phát triển các phần mềm nền web một cách nhanh nhất có thể. Rails framework tận dụng các đặc ...

1. Tổng Quan

Ruby on Rails (RoR) là một web framework được viết bằng ngôn ngữ Ruby và tất cả các ứng dụng trong Rails sẽ được viết bằng Ruby. Ruby on Rails được tạo ra để hỗ trợ các lập trình viên việc phát triển các phần mềm nền web một cách nhanh nhất có thể. Rails framework tận dụng các đặc điểm của ngôn ngữ Ruby. Yukishiro Matzumoto viết ra ngôn ngữ này vào năm 1995, nó khá giống với các ngôn ngữ thông dịch khác như Perl, Eiffel, Python…. Ruby là ngôn ngữ script, định nghĩa kiểu động và là một ngôn ngữ hướng đối tượng, nó được thiết kế với một cú pháp trong sáng, tạo cảm giác dễ đọc, và viết code ngắn gọn nhất có thể đối người dùng, ví dụ như nó không cần dấu chấm phẩy khi kết thúc câu lệnh, không cần các dấu ngoặc đơn khi khai báo các phương thức, có những đoạn code thậm chí được viết giống như việc chúng ta viết tiếng anh vậy.

Ruby on Rails được tạo ra như là một câu trả lời đối với các web frameworks khác như J2EE, .NET. Để quá trình phát triển phần mềm diễn ra nhanh hơn, RoR sử dụng các qui ước triệt để và đảm nhận xử lý rất nhiều các task khiến người lập trình viên không phải bận tâm về nó nữa như : mail management, object- database mappers, file structures, code generation… , đây chính là hai đặc điểm nổi bât nhất của RoR, điều này không chỉ giúp các lập trình viên viết code ít hơn, phát triển ứng dụng nhanh hơn mà còn làm ứng dụng dễ hiểu và dễ bảo trì hơn.

2. Mô hình MVC

RoR sử dụng các mẫu kiến trúc Model – View – Controller(MVC) để tăng cường khả năng bảo trì và phát triển của ứng dụng. MVC cho phép chúng ta chia ứng dụng thành các tầng sử lý logic, nghiệp vụ và giao diện người dùng một cách rõ ràng, điều này cũng gúp cho việc kiểm thử và tái sử dụng code được dễ ràng hơn.

  • Model

Tầng Model xử lý các nghiệp vụ của ứng dụng và trực tiếp thao tác với dữ liệu. Trong RoR, tầng model thường được sử dụng để tương tác với các thành phần tương ứng với chúng trong cơ sở dữ liệu và validate dữ liệu.

  • View Tầng view hiển thị giao diện người dùng, trong RoR các view là các file HTML được nhúng cùng với các đoạn mã Ruby. Các đoạn mã Ruby được nhúng trong HTML file là khá đơn giản, thường chỉ gồm các vòng lặp và các lệnh điều kiện rẽ nhánh, nó được sử dụng để hiện thị dữ liệu lên form của view.
  • Controller Controller tương tác với model và view. Các request đến từ trình duyệt sẽ được xử lý bởi controller, sau đó controller có thể sẽ tương tác với model để lấy dữ liệu sau đó trả về cho view để hiển thị thông tin.

3. Kiến trúc RoR

Kiến trúc của RoR có những đặc điểm sau:

  • Kiến trúc MVC
  • Representational Sate Transfer (REST) cho các web services
  • Hỗ trợ nhiều hệ quản trị cơ sở dữ liệu lớn như MySQL, Oracle, MS SQL, PostgreSQL…
  • Ngôn ngữ script Ruby được viết bên phía Server
  • Sử dụng các quy ước thay vì phải cấu hinh
  • Có các bộ sinh script để tự động thực hiện các task

Tương ứng với các đặc điểm trên RoR gồm các thành phần sau:

  • Action Mailer
  • Action Pack
  • Action Controller
  • Action Dispatcher
  • Action View
  • Active Model
  • Active Record
  • Active Resource
  • Active Support
  • Railties

Dưới đây là hình vẽ mô tả kiến trúc tổng quan của RoR

alt text

Hình 1: Kiến trúc tổng quan của RoR

  • Action Mailer

Mô đun này chịu trách nhiên cung cấp các dịch vụ email. Nó xử lý các email đến và cho phép tao mới các email. Mô đun này có thể xử lý từ những email text đơn giản đến những email có các định dạng phức tạp. Action Mailer được kế thừa từ Action Controller, nó cung cấp các phương thức để tao email với các template cũng giống như Action View sử dụng nó để render các trang lên trình duyệt

  • Action Pack

Mô đun Action Pack cung cấp các lớp ở tầng controller và view trong mô hình MVC. Những mô đun này tiếp nhận request từ client và sau đó ánh xạ chúng đến các action tương ứng. những action này được định nghĩa trong tầng controller và sau đó các action này sẽ render view hiển thị lên trình duyệt. Action Pack được chia thành 3 mô đun con, đó là: • Action Dispatch: xử lý routing các request, nó parse các request và xử lý một vài quá trình liên quan đến giao thức HTTP như xử lý cookies, session… • Action Controller: Sau khi Action Dispatch xử lý request nó sẽ routing các request đến các controller tương ứng, Mô đun này cung cấp các base controller tất để các controller khác có thể kế thừa từ nó. Action Controller chứa các action để điều khiển model và view, thêm vào đó nó quản lý các session người dùng , luồng chảy ứng dụng, caching, mô đun helper và các thực thi các bộ lọc trong các quá trình tiền xử lý. • Action View: Được gọi bởi Action Controller. Nó render các view khi có yêu cầu, Action View cung cấp các master layouts, templates và các view helpers , các thành phần này hỗ trợ việc sinh tự động ra phần khung cho các trang HTML hay các định dạng khác. Có 3 template trong Rails là : rhtml, rxml và rjs. Định dạng rhtml sinh ra các view HTML cho người dùng có nhúng thêm các đoạn code Ruby (ERB), rxml được sử dụng để xây dựng các tài liệu XML, rjs cho phép tạo ra các đoạn mã động JavaScript để thực thi các AJAX functionality.

  • Active Model

Định nghĩa interface giữa mô đun Action Pack và Active Record. Giao diện Action Record có thể được dùng bên ngoài Rails, cung cấp các chức năng Object – relational mapping (ORM). ORM là một kỹ thuật lập trình giúp chuyển đổi dữ liệu giữa các thệ thống không tương thích được viết bởi các ngôn ngữ hướng đối tượng

  • Active Record

Được sử dụng để quản lý dữ liệu trong các cơ sở dữ liệu quan hệ thông qua các đối tượng. Trong RoR mô đun Active Record cung cấp object – relational mapping đến các class. Mô đun này xây dựng nên tầng model,giúp kết nối các bảng database với các lớp tương ứng trong các lớp Ruby. Rails cung cấp các công cụ để thực thi chức năng CRUD mà không phải cấu hình. CRUD cho phép tạo mới, đọc, cập nhật và xóa các bản ghi trong cơ sở dữ liệu thông qua các đối tượng Ruby. Thêm vào đó, nó cũng cung cấp các khả năng tìm kiếm thông minh và khả năng tạo ra các mối quan hệ hay các liên kết giữa các model. Active Records có những quy ước rất chặt chẽ bắt các developer phải tuân thủ theo như : phải đặt tên lớp, các bảng, các khóa chính và khóa ngoài như thế nào. Mô đun này được sử dụng để tạo ra các lớp trong tầng Model, chúng chứa đựng phần logic nghiệp vụ, xử lý validate và các mối quan hệ, ánh xạ đến các bảng và hỗ trợ kết nối đến các hệ quản trị cơ sở dữ liệu khác nhau.

  • Active Resource

Quản lý các kết nối giữa RESTful web services và các đối tượng nghiệp vụ, làm giảm số lượng code cần viết để ánh xạ đến các tài nguyên. Active Resource ánh xạ model class đến các tài nguyên REST ở xa cũng giống như cách mà Active Record ánh xạ từ model class đến các bảng cơ sở dữ liệu. Nó cũng cung cấp các cơ chế proxy giữa Active Resource (client) và một RESTful service. Khi một có một request cần truy cập đến các tài nguyên ở xa, một REST XML được sinh ra và được truyền đi, sau đó kết quả sẽ được parse sang các đối tượng Ruby.

  • RESTful Architecture

REST viết tắt của Representational State Transfer. REST là một sự thay thế cho web service, chứ SOAP và WSDL. RESTful web service thích hợp khi mà các service web có tính chất phi trạng thái, bandwith bị giới hạn (Nó rất phù hợp cho các thiết bị mobile vì nó không sử dụng nhiều tài nguyên như là các giao thức khác như SOAP)

  • Active Support

Là một bộ tiện ích và các thư viện chuẩn của Ruby, nó hữu ích cho quá trình phát triển ứng dụng vì nó bao gồm rất nhiều sự hỗ trợ cho các multi-bytes string, internationalization, time zones và testing.

  • Railties

Đảm nhiệm kết nối tất các các mô đun ở trên với nhau, thêm vào đó nó xử lý quá trình mồi cho ứng dụng, giao diện dòng lệnh, và cung cấp bộ sinh code của Rails. Rake là một trong những lệnh được sử dụng để thực hiện các task database, triển khai, tài liệu, testing và cleanups.

4. Triển khai và cài đặt kiến trúc RoR

Dưới đây là các sơ đồ UML mô tả các thành phần, giao diện, bộ kết nối của hệ thống

alt text

Hình 2: Dynamic View Pakage Diagram

alt text

Hình 3. Static View Page Diagram

5. Kết luận

Vì Rails được xây dựng bằng Ruby nên nó kế thừa những điểm mạnh và điểm yếu của ngôn ngữ này. Ruby là một ngôn ngữ script với cú pháp trong sáng ,dễ đọc, dễ hiểu và là ngôn ngữ hướng đối tượng. Vì nó là ngôn ngữ thông dịch nên nó chạy chậm hơn các ngôn ngữ biên dịch khác nhứ Java,C++ hay C. Trong nhiều trường hợp, sự khác biệt một chút về tốc độ không phải là vấn đề đáng bận tâm nhưng khi mà ứng dụng web phục vụ hàng triệu người dùng tại cùng một thời điểm thì khi đó vấn đề hiệu năng lại là vẫn đề sống còn. Ruby không phù hợp cho các ứng dụng đòi hỏi hiệu năng cao bởi vì nó được xây dựng không dùng cho việc tối ưu hóa tốc độ, nó được thiết kế với mục đích là đơn giản hóa, dễ sử dụng, và có thể phát triển ứng dụng một cách nhanh chóng. Ruby không hỗ trợ tốt về thread, giống như các ngôn ngữ script khác, Ruby gặp khó khăn khi giải quyết các tiến trình có thời gian sống lâu, trong khi đó các ngôn ngữ như Java , C# được hỗ trợ về Thread rất tốt bởi vì chúng đã được tối ưu hóa các quá trình xử lý thread trong nhiều năm liền, một điểm yếu khác chính là vấn đề quản lý bộ nhớ, bộ thu gom rác của Ruby hoạt động không tốt như bộ thu gom rác của Java, bởi vì với Ruby,thậm chí bộ nhớ không có khái niệm về vùng nhớ Heap, và Stack nên việc giải phóng bộ nhớ chậm hơn các ngôn ngữ khác như Java, C,C++. Một điều nữa, việc Rails hỗ trợ cho các nhà phát triển quá nhiều và bắt ứng dụng của chúng ta phải tuần theo những quy ước và mô hình MVC, theo đúng ý nghĩa tên của Framework “on rails way” cũng gây ra những mặt trái của nó, sẽ là khó khăn nếu chúng ta phát triển tiếp một ứng dụng mà nó đã được xây dựng bằng một ngôn ngữ khác, với các cơ sở dữ liệu đã có trước , với một mô hình khác bằng RoR. Mặc dù có một vài điểm yếu, nhưng chúng ta cũng phải thừa nhận những điểm mạnh mà RoR có được trong khi các framework khác thì không, kiến trúc RoR đã chấp nhận hi sinh sự mềm dẻo trong khai báo các file cấu hình bằng viêc tuân theo những quy ước nhằm tận dụng khả năng hỗ trợ từ Framework, do vậy RoR phù hợp cho việc phát triển từ đầu các ứng dụng vừa và nhỏ, yêu cầu thời gian phát triển ngắn dễ bảo trì, dễ đọc hiểu, không đòi hỏi hiệu năng cao.

0