Kiến trúc Ruby on Rails
Bài đăng này đã không được cập nhật trong 7 năm
Chao (Tiếng Ý), Đến tháng lại đau, hôm nay mình sẽ trở lại với một chủ vấn đề không mới, nhưng cũng ít người chú ý tới khi dev một ngôn ngữ, đó là Kiến Trúc Bất cứ một ngôn ngữ, một Framework nào khi xây dựng nên đều có một hệ thống Kiến trúc của nó. Đó là những vấn đề căn bản, cốt lõi nhất để Dev năm được ngôn ngữ và sử dụng nó như vợ bé của mình. Ấy vậy nhưng trong quá trình chạy dự án, rất nhiều anh em huynh đệ vì sự vội vàng không cần thiết lắm của mình mà chỉ nắm các yếu tố kĩ thuật, không quan tâm đến điều căn bản như mình nói ở trên. Điều này cũng giống như các cao thủ võ lâm hồi xưa, cầm trong tay bí kíp mà chỉ chăm chăm học chiêu thức, không học được ý thức, ý niệm trong đó. Vậy nên hôm nay, với tư xờ cách là một thằng Dev Ruby on Rails dưới 10 năm kinh ngh***(Chính xác là 1 năm 1 tháng), mình xin chia sẻ với anh em huynh đệ một vài thứ cơ bản về: KIẾN TRÚC CỦA RUBY ON RAILS Chiến nhé!
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.
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
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
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.
3.5 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.
3.6 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)
3.7 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.
3.8 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.
Thôi thế đã nhé, có thời gian mình sẽ nghiên cứu tiếp sâu hơn và chia sẻ lại với mọi người. Mình hy vọng với những thông tin cơ bản đó mà mình tìm hiểu được, sẽ giúp cho mọi người có cái nhìn đây đủ hơn về tâm niệm và ý niệm trong môn phái mà chúng ta đang theo đuổi. Mình về ăn tối đây, bye bye
All rights reserved