[Flex] Hướng dẫn cài đặt framework Cairngorm. P2

Trong phần 1, tôi đã giới thiệu qua ModelLocator và giới thiệu sơ lược cách tổ chức của một project Cairngorm. Trong phần 2  này, tôi cố gắng trình bày rõ hơn về các luồng dữ liệu trong Cairngorm hay cách mày ModelLocator điều phối hoạt động với các View – thực ra nó chính là câu trả lời cho câu hỏi, khi thông tin từ view gửi request (yêu cầu) đến web service thì web service sẽ phản hồi như thế nào lên View.
Các package được cài đặt trong Cairngorm project mà tôi đã liệt kê trong phần 1 là business, command, controller, events, model và view. Ở phần 2 này bạn cần phải hiểu thêm về vai trò và chức năng của CairngormEvent, CairngormEventDispatcher, FrontController, Command và cách chúng phối hợp với nhau trong cairngorm project.

  • CairngormEvent: tất cả mọi hoạt động sẽ được phát ra từ CairgormEvent – nói đơn giản là bất cứ một hành động nào cần triệu hồi webservice, bạn sẽ cần phải dispatch một CairngormEvent.
  • CairngormEventDispatcher : làm một singleton như ModelLocator hoặc ServiceLocator. Thường thì để dispatch một CairngormEvent, bạn gọi phương thức dispatch từ một instance của CairngormEventDispatcher. Tuy nhiên các CairgormEvent có thể dispatch thông qua phương thức dispatch có sẵn, nhưng sự thực là phương thức dispatch của các CairngormEvent chỉ wrapper lại phương thức dispatch của CairngormEventDispatcher.
  • FrontController: Đơn giản chỉ đóng vai trò mapping (ánh xạ – điều hướng) các CairngormEvent cho các Command tương ứng để xử lý
  • Command: Tất cả các Command cần được implement từ interface ICommand. Interface ICommand có phương thức execute, là nơi tiếp nhận và xử lý CairngormEvent.

Các luồng trong kiến trúc Cairngorm

Hình minh họa dưới đây tóm tắt các luồng trong kiến trúc Cairngorm

các luồng trong kiến trúc cairngorm

Để minh họa cho sơ đồ trên, tôi lấy ví dụ bạn có màn hình login và muốn gửi request đến phía server. Server sẽ kiểm tra kết quả và trả về cho màn hình login.

Như vậy bạn sẽ có một CairngormEvent là login – bản thân nó sẽ chứa một cặp credential là username và password. Event này sẽ được dispatch lên khi bạn click vào nút Login trên Form.

Khi Event Login được dispatch lên, FrontController sẽ nhận được đầu tiên và mapping event này cho Command tương ứng. Tất nhiên là trong FrontController, bạn đã phải khai báo sự ánh xạ này.

Sau khi FrontController chuyển event này sang cho Command, Command sẽ tự triệu hồi phương thức execute, và cũng trong phương thức này, một delegate tương ứng được khởi tạo và triệu gọi web service. Kết quả từ web service trả về sẽ được nằm trong các phương thức fault hay result của Command, và dữ liệu sẽ cập nhật vào trong ModelLocator.

Đến đây thì Form Login đã hoàn toàn nhận được sự thay đổi từ phía ModelLocator – để làm điều này thì dữ liệu của form Login phải được binding với ModelLocator.

Kết luận

Thực sự framework Cairngorm hướng chúng ta cài đặt mã của ứng dụng theo một cấu trúc nhất định và lái các luồng của ứng dụng theo một khuôn khổ nhất định. Trong phần 3, tôi sẽ trình bày một ứng dụng hoàn chỉnh áp dụng Cairngorm.

Ghi chú:

Có một cách tiếp cận khác của Cairngorm là sử dụng các ViewHelper để cập nhật sự thay đổi lên view, thay vì để view tự binding dữ liệu với ModelLocator.
Lợi điểm của việc sử dụng ViewHelper chính là tiết kiệm bộ nhớ do không phải đặt hầu như toàn bộ dữ liệu trao đổi với phía server vào ModelLocator. Tuy nhiên đây lại là cách tiếp cận cũ từ thời Cairngorm còn dành cho Flash – việc sử dụng View Helper sẽ không cần tận dụng khả năng binding của Flex. Tôi sẽ trình bày cách tiếp cận này vào phần cuối của loạt bài về framework Cairngorm, có thể là phần 4.

One thought on “[Flex] Hướng dẫn cài đặt framework Cairngorm. P2

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