[Flex] Sơ lược về framework Cairngorm

Trong một bài viết trước tôi có trình bày về các framework phổ biến dành cho các ứng dụng Flex. Một trong các framework đó là Cairngorm. Đến thời điểm hiện tại, 2 framework mà tôi thường sử dụng là PureMVC và Cairngorm. Tuy nhiên do phần lớn dự án tôi tham gia là các dự án Flash/AS3 nên tôi thường làm việc với PureMVC nhiều hơn là Cairngorm – một framework vốn thiết kế cho Flex. Sự thật mục đích ban đầu của Cairngorm là dành cho các dự án Flash ActionScript 2.0, trước cả khi Flex ra đời. Cũng xin được nói là tôi không phải là “expert” về các framework này, tôi chỉ áp dụng cho các dự án của mình, từ đó đánh giá với những dự án nào thì framework nào thích hợp hơn.

Sơ lược về kiến trúc của Cairngorm

Vốn là một framework ban đầu thiết kế cho các dự án Flash.Các phiên bản Cairngorm trước Flex chỉ có SerivceLocator và ViewHelper. Khi Flex ra đời cùng với khả năng “binding” thì ViewHelper dần lạc hậu và bị loại ra khỏi Cairngorm. Cairngorm được xây dựng trên cơ sở các pattern design thông dụng như MVC, Singleton và Observer. Các Singleton mà bạn dễ dàng tìm thấy trong Cairngorm là ServiceLocator, ModelLocator và FrontController.  Các lớp trong kiến trúc của Cairngorm bao gồm:

  • Model – là ModelLocator
  • View – là các file MXML và các lớp ActionScript kiến tạo nên các UI – User Interface
  • Controller – là FrontController. FrontController đóng vai trò ánh xạ (mapping) các CairngormEvent cho các Command tương ứng.
  • Các lớp còn lại đóng vai trò gọi các web service từ phía server bao gồm Responder, Delegate và SerivceLocator.

ModelLocator và những ngộ nhận về  ModelLocator

Với những lập trình viên có kinh nghiệm với các ngôn ngữ lập trình hay framework khác, việc sử dụng Cairngorm lần đầu thường đem lại những ngộ nhận sau:

  • Phải luôn cài đặt và gọi phương thức getInstance mỗi lần truy xuất các model.
  • Việc đặt các tham chiếu đến ModelLocator gây ra rò rỉ bộ nhớ.

Một người bạn của tôi – aka Đức Bột Mốc đã thắc mắc nhiều về việc này khi anh ta cố gắng đặt các tham chiếu đến ModelLocator ở các lớp View của mình

var model: ModelLocator = ModelLocator.getInstance(); // model sẽ được binding với các component

Như vậy cần sử dụng ModelLocator như thế nào cho hợp lý ?

  • ModelLocator thiết kế như một nơi để lưu trữ “session” hay state  của ứng dụng.
  • ModelLocator được dùng để Binding với các thuộc tính của component. (Thêm chỉ thị dịch [Bindable] khi cài đặt ModelLocator)
  • Không được lưu dữ liệu trực tiếp vào ModelLocator.
  • Gọi getInstance một lần duy nhất trong mỗi view – với mổi view nên đặt một tham chiếu đến ModelLocator

View trong kiến trúc Cairngorm

Thông thường mỗi view sẽ có một tham chiếu đến ModelLocator. Các dữ liệu của view sẽ được binding từ ModelLocator, điều này có nghĩa là các thay đổi trên view sẽ update ngược trở lại vào ModelLocator. Cũng cần nhấn mạnh Binding là một trong những tính năng quan trọng nhất của Flex.

FrontController

Như đã trình bày ở trên, FrontController chỉ có một nhiệm vụ duy nhất là ánh xạ các CairngormEvent cho các Command tương ứng Như vậy với các Event không phải là CairngormEvent, bạn đừng “ép” FrontController xử lý.

Command và CairgormEvent

Command không thực sự xử lý nhiều thứ trong nó. Thay vào đó, nó nhận các instance của CairngormEvent – lấy dữ liệu chứa trong các event này và truyền vào các phương thức xử lý tương ứng trong delegate. Command có nhiệm vụ “lựa” đúng phương thức nào trong delegate để thực hiện với Event tương ứng.

Delegate và Responder

Delegate là lớp duy nhất giao tiếp với các service “nằm bên dưới cùng” của ứng dụng.
Responder chỉ cài đặt các phương thức “result” hay “fail” trả về từ một request.

ServiceLocator

Không đơn giản chỉ là một danh sách chứa các service mà bạn định nghĩa cho ứng dụng, ServiceLocator cũng xử lý các vấn đề về bảo mật. Để đăng nhập, service đăng nhập cần thiết phải gọi các cơ chế bảo mật, sau khi đăng nhập thành công, ServiceLocator sẽ cài đặt “credential” cho tất cả các service còn lại.

Bài viết này chỉ giới thiệu sợ lược về kiến trúc của Cairngorm. Trong loạt bài sau tôi sẽ đưa ra các bước để cài đặt một ứng dụng Flex với Cairgorm.

3 thoughts on “[Flex] Sơ lược về framework Cairngorm

    • Em có thể tải ebook Professional Cairngorm tại link này – miễn phí và đầy đủ

      Professional Cairngorm
      deca.cuc.edu.cn/Community/media/p/775/download.aspx

      Nếu tải không được thì để lại email anh sẽ gửi cho em.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s