Chương 3.Kiến trúc của Rails

3.1. Mô hình MVC

Trở lại năm 1979, Trygve Reenskaug giởi thiệu một kiến trúc mới trong phát triển ứng dụng tương tác. Trong thiết kế của ông ý, ứng dụng được chia ra làm 3 thành phần : models, views và controller.

Model thì chịu trách nhiệm duy trì trạng thái của ứng dụng. Đôi khi chỉ là thoáng qua, chỉ là một vài tương tác với người sử dụng. Thỉnh thoảng trạng thái cố định sẽ được lưu ra ngoài, thường cái này chính là cơ sở dữ liệu. Model không chỉ là dữ liệu, nó thực thi tất cả các quy định kinh doanh áp dụng vào dữ liệu. Việc code thực hiện trong model thì chúng tôi có thể đảm bảo rằng không có cái gì khác trong ứng dụng có thể làm cho dữ liệu của chúng ta không hợp lệ. Model hoạt động như một người gác cửa và lưu trữ dữ liệu.

View thì chịu trách nghiệm tạo ra giao diện người dùng, giao diện được tạo ra dựa trên dữ liệu trong model. Mặc dù view hiện thị cho người dùng xem nhưng không bao giờ xử lý dữ liệu đi tới. Công việc của view hoàn thành khi đã hiện thị dữ liệu thành công. Có thể có nhiều view cùng truy cập chung một dữ liệu model, với các mục đích khác nhau.

Controller thì điều khiển ứng dụng. Các controller nhận dữ liệu từ thế giới bên ngoài(thường là người dùng) rồi tương tác với model và làm view hiện thị thích hợp với người dùng.

Kiến trúc MVC ban đầu thường được dùng đế phát triển cho ứng dụng có giao diện thông thường, đây là nơi mà các nhà phát triển ít lo lắng về việc tách biệt và nối các thành phần, làm code việc viết code và bảo trì dễ dàng hơn. Rails chú trọng đến cấu trúc – bạn phát triển các model, view, controller như các khối riêng biệt của chức năng , rồi chúng đan vào nhau để thực thi. Quy trình đan này dựa trên việc sử dụng thông minh có sẵn nên bạn không phải cấu hình thêm ở bên ngoài.

Trong ứng dụng của Rails, thì khi yêu cầu tới đầu tiên nó sẽ được giửi tới router, router sẽ hoạt động để tìm trong ứng dụng nơi yêu cầu sẽ giửi và phân tích yêu cầu. Cuối cùng, nó sẽ xác định phương thức cụ thể gọi là action trong code controller. Action này tìm dữ liệu trong yêu cầu, nó có thể tương tác với model và có thể gọi đến 1 action khác. Sau cùng, action chuẩn bị thông tin cho view, nó sẽ vẽ cho người dùng.

3.2. Rails Model

Nói chung, chúng ta muốn các ứng dụng web của mình lưu trữ thông tin trong một cơ sở dữ liệu quan hệ. Mặc dù cơ sở dữ liệu quan hệ là tốt cho nhìn vào nhưng khi kết hợp cơ sở dữ liệu quan hệ với ngôn ngữ lập trình hướng đối tượng rất khó khan. Đối tượng bao gồm cả dữ liệu và hành động còn cơ sở dữ liệu chỉ là tập các giá trị.

Trong Rails sử dụng Action Record để kết hợp giữa ngôn ngữ Ruby với cơ sở dữ liệu quan hệ. Object-Relational Mapping(ORM) dùngđể ánh xạ từ bảng cơ sở dữ liệu tới các lớp, Action Recordbám sát theo các tiêu chuẩn mô hình ORM: bảng ánh xạ tới lớp, các dòng ánh xạ tới các đối tượng, các cột ánh xạ tới thuộc tính của đối tượng. Action Record khác các thư viện ORM trong cách cấu hình, bằng cách dựa vào các quy ước nó làm giảm công việc cấu hình của các nhà phát triển. Cũng làm giảm sự phức tạp của giao dịch với cơ sở dữ liệu, khiến chúng ta tự do làm việc trên business logic. Nó là model nền móng trong kiến trúc của Rails

3.3. Action Park : View và Controller

Khi bạn nghĩ về View và Controller là một phần khá quan trọng trong MVC. Controller cung cấp cho View dữ liệu và nhận dữ liệu từ các trang view, chính vì lý do này nên Rails đã gói vào làm một gọi là Action Park.

Trong Rails, View chịu trách nhiệm tạo tất cả hoặc 1 phần của phản hồi để được hiện thị trên trình duyệt, xử lý một ứng dụng hoặc giửi 1 email. Nó chỉ đơn là một đoạn code HTML mà hiện thị một vài text nhất định. Thông thường, nội dung động được tạo bởi các action method trong controller. Nội dung động này được tạo một bởi các mẫu, phần lớn lược đồ mẫu gọi là nhúng Ruby(ERB). Bạn có thể ERB để cấu trúc mảng JavaScript trên server mà có thể xử lý trên trình duyệt. Rails cũng cung cấp XML Builder để cấu trúc tài liệu XML sử dụng code Ruby – cấu trúc tạo XML sẽ tự động theo cấu trúc của code.

Controller trong Rails là trung tâm logic của ứng dụng. nó tương tác giữa người dung, view và model. Tuy nhiên, Rails hầu hết xử lý các tương tác ở đằng sau, code của bạn cô đọng về mức chức năng của ứng dụng, điều này làm cho phát triển và bảo tri trở nên dễ ràng hơn. Controller cũng là nơi mà một số dịch vụ quan trọng xử lý: định tuyến các yêu cầu bên ngoài để hoạt động nội bộ, quản lý caching, quản lý mô đun helper, mở rộng các khả năng view mẫu, quản lý session.