Mục tiêu của Silverlight 2 đối với hầu hết các ứng dụng là viết code quản lý sử dụng những ứng dụng mới nhất trong Silverlight. Bên cạnh đó, bạn có thể sử dụng những tùy chọn để làm đơn giản hóa thay cho những mẫu lập trình.
Silverlight cung cấp 2 kiểu lập trình riêng biệt trong việc xây dựng những ứng dụng:
SVTH: Thân Hoàng Lộc Trang 25
Nguyễn Anh Việt Lưu Xuân Việt
SVTH: Thân Hoàng Lộc Trang 26 Nguyễn Anh Việt
Lưu Xuân Việt
- Quản lý API với Silverlight. Mục đích nhằm biên dịch và chạy code trên CLR (common language runtime) hoặc trên DLR (dynamic language runtime) đối với Silverlight.
- JavaScript với Silverlight. Thể hiện lên trình duyệt sử dụng code JavaScript.
Những mô hình lập trình này hoàn toàn khác biệt bởi vì chúng ta không thể đồng thời sử dụng cả hai kiểu lập trình trên đối với một trường hợp cụ thể trong một Silverlight plug-in. Tuy nhiên, bạn cũng có thể thi hành việc trang trí màn hình nền bằng cách sử dụng một đoạn code JavaScript khi chuyển trạng thái qua managed API trong lúc tải ứng dụng lên.
The managed API cung cấp nhiều hàm xử lý hơn JavaScript API, và đây là một điểm nổi bật của Silverlight. Những ứng dụng sử dụng managed API truy xuất tới những phiên bản .NET Framework nhẹ hơn. Còn đối với JavaScript API chỉ truy xuất và thể hiện nội dung của Silverlight và những đoạn JavaScript nhúng vào trình duyệt.
1. Lập trình quản lý và mô hình ứng dụng (Managed Programming and the Application Model)
Managed API cho phép bạn gói những trình điều khiển và những tập tin tài nguyên vào trong một gói tập tin ứng dụng (.xap). Silverlight plug-in có nhiệm vụ tải những gói ứng dụng này lên và rút trích nội dung bên trong.
Một gói ứng dụng chỉ chứa một nhóm hành động với những lớp đã được khai báo trên ứng dụng. Lớp ứng dụng gói gọn sự tương tác giữa ứng dụng và Silverlight plug-in. Chẳng hạn như, nó cho phép bạn trình bày một giao diện người dùng tương tác với trang web chủ. Thêm vào đó, nó cung cấp những event của ứng dụng thường trực và quản lý tài nguyên.
SVTH: Thân Hoàng Lộc Trang 27 Nguyễn Anh Việt
Lưu Xuân Việt
Điểm mạnh của Silverlight là sử dụng những mô hình ứng dụng giới hạn đề cập tới những gói ứng dụng và những hàm đã được đóng gói bởi những lớp Application. Mô hình ứng dụng giúp chúng ta trình bày được cả những ứng dụng đơn giản và phức tạp. Có thể mở rộng ứng dụng này bằng cách chia sẻ những tài nguyên trên mạng.
A. Managed API for Silverlight
Bạn có thể sử dụng ngôn ngữ đánh dấu XAML gói gọn những giao diện người dùng đã thiết kế vào trong managed API và JavaScript API. Với managed API, bạn có thể đưa thừa số code ứng dụng vào nhiều tập tin (File) và cung cấp thêm code-behind kèm theo.
Khi Silverlight plug-in tải những những tập tin XAML lên, nó sẽ tạo ra một cây đối tượng mà những mã bên trong (code-Behind) có thể thao tác. Những mã quản lý ứng dụng cũng có thể được thao tác bởi HTML DOM (Document Object Model) thông qua cầu nối HTML.
Silverlight API định nghĩa việc thiết lập đối tượng y như là một cây đối tượng mà cho phép bạn chứa đựng nội dung khởi tạo ban đầu của ứng dụng nền Silverlight được tải lên bởi XAML, và điều chỉnh cây đối tượng này trong thời gian thực thi. Bên trong managed API, sự tương tác với cây đối tượng Silverlight là định nghĩa với managed code. Sử dụng CLR, managed code là sự biên dịch vào bên trong assembly. Assembly tiêu biểu cũng chứa đựng XAML cho ứng dụng nền Silverlight. Managed code có thể Support cho mô hình ứng dụng Silverlight, và có thể gọi hồi đáp của đối tượng trong suốt thời gian sống của những event, hoặc là những event khởi tạo user. Bạn cũng có thể sử dụng managed code để viết những lớp hỗ trợ, định nghĩa những đối tượng data, và cho nhiều những kịch bản ứng dụng khác. Bạn cũng có thể sử dụng DLR nhiều hơn CLR, vấn đề này đang được tranh luận trong Dynamic Languages in Silverlight 2.
SVTH: Thân Hoàng Lộc Trang 28 Nguyễn Anh Việt
Lưu Xuân Việt
¾ Đặc điểm của Managed API (Characteristics of the Managed API) a. Managed Code là sự mở rộng
Trong Silverlight 1.0 trước đây, và bên dưới JavaScript API hiện tại (độc lập với version client) không hỗ trợ cho việc khai báo hạn chế một tùy chọn phần tử UI. Bạn có thể kết hợp một phần tử và khi tải chúng mất nhiều thời gian từ khai báo tương tự của XAML, và gán những hàm tương tự như code hỗ trợ. Nhưng điều này gần như không hỗ trợ cho việc co giãn, phóng to kích thước. Sử dụng Managed API, tính co dãn hoàn toàn là một vấn đề xuất phát từ những lớp hoặc control hiện hành được hỗ trợ một cách hữu ích trong những hàm xử lý cơ bản. Và cũng có thể khai báo bằng một số phần tử hỗ trợ như: tạo mới một control template, cập nhật những lớp event handle…v…v…Mở rộng việc quản lý code cũng là khái niệm cơ bản của việc quản lý và lập trình .NET Framework và đây cũng không phải là một vấn đề đơn giản trong Silverlight.
b. Cây đối tượng (Object Trees)
Cây đối tượng là khái niệm tồn tại trong JavaScript API, và sự vận dụng cây vào trong mô hình này cũng có giới hạn bởi vì nó không có một đối tượng kỹ thuật khởi tạo. Trong quản lý API, bạn có thể gọi hàm khởi tạo bên trong những lớp và có thể thêm vào cây mà không cần sử dụng phân tích XAML làm trung gian. Thật ra, bạn có thể xây dựng một cây thật quy mô hoàn toàn trong khai báo code bằng cách gọi sự khởi tạo liên tục và thêm những đối tượng vào cây đối tượng bắt đầu từ root và xuyên suốt trong các thuộc tính con (Children).
Bạn có thể tham chiếu các đối tượng trong cây đối tượng suốt thời gian thực thi của Silverlight bằng cách quản lý code hoặc JavaScript.
SVTH: Thân Hoàng Lộc Trang 29 Nguyễn Anh Việt
Lưu Xuân Việt
c. Quản lý code-behind và các lớp cục bộ (Managed Code-Behind and Partial Classes)
Kỹ thuật chính trong việc khai báo một UI trong Silverlight là việc định nghĩa các phần tử trong việc tạo XAML. Điều này gồm cả việc sử dụng những Style và Template, chúng cũng được khai báo bên trong việc tao XAML. Trong nhiều trường hợp bạn sẽ muốn đưa những đối số khác nhau vào trong những file XAML mà được tích hợp trong những mô hình ứng dụng Silverlight. Để định nghĩa một tương tác cần thiết trong ứng dụng, bạn thường muốn định nghĩa event handler mà đáp lại tới đối tượng trong suốt thời gian event sống hoặc event khởi tạo user cho những đối tượng được khai báo trong XAML. Trong quản lý API, mỗi trang XAML là nơi chứa đựng những event handling hoặc nội dung của những phần tử root. Chúng chỉ được đưa vào quá trình thực thi như là một phần tất yếu của quá trình xây dựng. Sự đưa vào quá trình thực thi này cung cấp những móc nối cần thiết trong suốt thời gian chạy tương tác với cây đối tượng được tạo ra khi trang XAML tải lên. Những móc-nối này bao gồm những event handler tốt nhất tham chiếu tới bất kỳ đối tượng nào được đặt Name hoặc x:Name trong XAML. Trong cấu trúc Silverlight, XAML không biên dịch hết nội dung bên trong nó. Nhiều cây đối tượng được tạo ra trong XAML cho UI bị trì hoãn lại cho tới khi trang XAML thực sự được tải lên hết trong ứng dụng đang chạy và được xử lý bằng những đoạn XAML Silverlight.
Code-Behind là một thuật ngữ sử dụng miêu tả code tham gia vào một lớp thành phần với trang XAML khi tạo dựng hoặc biên dịch ứng dụng.
d. Chuẩn hóa tương tác DOM (Formalized DOM Interaction)
Trong JavaScript API, tham chiếu đối tượng hoặc biến trong HTML DOM từ Silverlight nguyên bản hoặc ngược lại không có liên quan gì bởi vì chính nó đã có thể trình bày được bởi sự tồn tại của nó trong trình duyệt hoặc trong một phạm vi nào đó. Trong code quản lý API, một phân đoạn định dạng đã tồn tại bởi vì code quản lý sử dụng
SVTH: Thân Hoàng Lộc Trang 30 Nguyễn Anh Việt
Lưu Xuân Việt
thư viện trong Silverlight và chính CLR chứ không phải là trình duyệt. Sự tương tác với DOM từ quản lý API, bạn có thể sử dụng một chuỗi những đặc trưng mà đôi khi những tập chuỗi này được tham chiếu như là một cầu nối HTML, hoặc cầu nối HTML DOM. Bao gồm những phần sau:
• APIs đưa ra những nhiệm vụ xử dụng DOM phổ biến (trong những trường hợp, tài liệu đối tượng) để code quản lý.
• Điều kiện dễ dàng có thể tạo những kiểu quản lý chính từ DOM.
• Kỹ thuật chuyển đổi những kiểu quản lý phát sinh từ những giá trị hoặc đối tượng chính JavaScript.
• APIs đưa ra những nét đặc trưng của đối tượng Silverlight plug-in trình bày trong DOM.
B. JavaScript API for Silverlight
JavaScript API là một mô hình đã được tích hợp sẵn trong bản Silverlight 1.0, và nó vẫn giữ được tính tương thích cũng như chạy những kịch bản ngoại lệ.
Trong JavaScript API, Silverlight plug-in tải lên một trang XAML đơn thay vì một gói ứng dụng. Trang XAML có thể bao gồm URL tham vấn tới một tài nguyên bên ngoài máy chủ (Server), như là hình ảnh và Video. Silverlight plug-in sử dụng XAML để tạo nên một cây đối tượng mà chúng ta có thể vận dụng nhiều cách lập trình sử dụng JavaScript trong tranh HTML chính.
JavaScript không cung cấp một mô hình ứng dụng riêng nhưng nó hỗ trợ với sự điều hướng trong nội dung ứng dụng để giải quyết những vấn đề phức tạp. Bên cạnh đó, nó cũng có thể giải quyết những kịch bản “cồng kềnh” như trong managed API ví dụ như trang trí màn hình nền (splash screens). Bạn cũng có thể tải lên những trang XAML mới
SVTH: Thân Hoàng Lộc Trang 31 Nguyễn Anh Việt
Lưu Xuân Việt
trong Silverlight plug-in hoặc những trang web mới trong trình duyệt và định hướng thực thi ban đầu cho chúng.
Trong một vài trường hợp, JavaScript API với Silverlight phụ thuộc vào nhau nhiều hơn so với Code quản lý.
1. Cân nhắc kiểu lập trình (Programming Model Considerations)
JavaScript API với Silverlight là kiểu lập trình mà đã được tích hợp sẵn trong phiên bản 1.0 của Silverlight. Nó sử dụng những tập con nhỏ của đối tượng mà sẵn sàng dùng được trong Silverlight 2, cộng với một số đối tượng riêng biệt trong JavaScript API.
Tập con này cũng cân nhắc sự ảnh hưởng với những đối tượng mà bạn khai báo trong XAML. Phân tách XAML của Silverlight chỉ tạo nên đối tượng bên trong cây đối tượng của những tập con này. Bởi vì cây đối tượng được tạo nên trên nền code cố định thi hành những cái bên dưới JavaScript. Nói cách khác, tập con và sự cân nhắc giới hạn mà áp dụng với JavaScript API cho Silverlight là sự có thật nhiều hơn ngôn ngữ mà bạn lựa chọn để viết cho chuỗi lý luận bên trong code-behind; Lựa chọn lập trình kiểu API cho phép bạn xác định rõ những đối tượng nào sẵn dùng trong ứng dụng.
Nếu bạn đã phát triển trong Silverlight 1.0, chắc chắn bạn đã quen thuộc với JavaScript API trong Silverlight. Lập trình JavaScript API tương tự như trong HTML DOM, và thực ra là sự thi hành những kịch bản nhúng trong trình duyệt giống như là kịch bản trong DOM. Nhưng mô hình Silverlight mở rộng trong cây đối tượng mà được tạo nên khi một trang XAML tải lên những nội dung co Silverlight plug-in. Điều này cho phép bạn xử lý những event trên đối tượng tiêu biểu mà bạn đã định nghĩa trong XAML. Get hoặc set giá trị thuộc tính hoặc thi hành những phương thức đối tượng trong thời gian chạy, chỉnh sửa cấu trúc của XAML, tạo cây đối tượng trong thời gian chạy và…v.v… Trong điều kiện của cấu trúc, JavaScript API cho phép một hướng mở trong cây đối tượng Silverlight trên Silverlight plug-in, bao bọc những kịch bản được triệu gọi, và kết thúc chúng trong plug-in như những đối tượng tự nhiên. Trong Internet Explorer việc
SVTH: Thân Hoàng Lộc Trang 32 Nguyễn Anh Việt
Lưu Xuân Việt
bao bọc được thực hiện khi gọi IDispatch::Invoke. Còn trong những trình duyệt khác có khả năng sử dụng những kiểu bao bọc khác phụ thuộc vào những plug-in và cấu trúc kịch bản.
2. Kịch bản cho khai báo JavaScript API (Scenarios for Using the JavaScript API)
¾ Splash Screens
Một Splash Screens là nội dung một khu vực khởi tạo để trình bày tới user trong khi những nội dung khác vẫn tiếp tục đang tải lên. Bên trong điều kiện thiết kế và mục đích, một Splash Screens đã ngầm quan hệ với UI và những yêu cầu tương tác. Mục đích chính của Splash Screens là:
• Thể hiện tính trực quan thú vị.
• Cung cấp thông tin phản hồi tới user mà ứng dụng (hoặc brower host) vẫn còn những hàm xử lý như mong đợi và tải chúng về như là sự phát triển.
• Giữ những thông tin đặc trưng trong tiến trình tải về.
Hai hàm đầu tiên có đủ tính năng thường thấy trong XAML mà không cần code- behind bên trong. Miễn là tiến trình tải về yêu cầu thu được những thông tin tối thiểu của một API từ lớp mạng mà nó thực hiện việc tải về. Có những lý do một Splash Screens là phương tiện tốt nhất bởi sự khai báo JavaScript API và truyền tải một trang XAML (Được hỗ trợ bởi Script code Behind) cho SplashScreenSource. JavaScript API có thể tải về Splash Screen mà không cần tác động tới Silverlight CLR và liên quan tới assemblies để rút ngắn thời gian khởi động.
3. Phiên bản JavaScript mới cho Silverlight 2 (New JavaScript API for Silverlight Version 2)
Silverlight 2 cung cấp việc thêm vào những đối tượng có thể sử dụng trong JavaScript API khác với việc thiết lập những đối tượng trong Silverlight 1.0. Nó hoàn toàn cho phép bởi vì những đối tượng này có sự thi hành tự nhiên mà nó trình bày tương tự như việc
SVTH: Thân Hoàng Lộc Trang 33 Nguyễn Anh Việt
Lưu Xuân Việt
khởi tạo một đối tượng trong bản 1.0. Bạn có thể tạo những đối tượng này trong bên trong XAML và sau đó script đến cây đối tượng. Để sử dụng những đối tượng này, client chạy những ứng dụng nền Silverlight nên có bản chạy Silverlight version 2 client.
Việc thêm vào những đối tượng với JavaScript API là bao gồm bên trong những tư liệu Silverlight cho JavaScript (Như thuộc tính-Properties, phương thức-Method, event, và bảng liệt kê- enumerations). Đây là những tài liệu cấp cơ bản. Đối tượng mới và thành viên mới cần chú ý tới những thông tin của phiên bản tham khảo trong trang chủ.
4. Những kỹ thuật riêng của JavaScript API (Technical Specifics of the JavaScript API)
Có một vài kỹ thuật riêng trong JavaScript API khác với việc quản lý API và sự mở rộng sang nhiều những phần tử JavaScript API
- JavaScript và các trường hợp nhạy cảm (JavaScript and Case Sensitivity)
Các đối tượng, phương thức và tên thuộc tính trong JavaScript là không được xem xét như là trường hợp nhạy cảm khi được xử lý bởi Idispatch hoặc kỹ thuật song song mà là bên ngoài Silverlight JavaScript API tới tập lệnh nhúng vào trong Brower Hosting. Vì vậy, bạn có thể dùng chữ hoa để khởi tạo trong giá trị thuộc tính event XAML và chữ thường trong những phương thức được định nghĩa hiện tại nếu bạn thích. Tuy nhiên, tài liệu cú pháp Silverlight và những tiêu đề trong những text mô tả chung phải chuẩn hóa những trường hợp cho đối tượng-object, thuộc tính-properties, phương thức-method, events, bảng liệt kê- enumerations, và các giá trị liệt kê ban đầu sử dụng chữ hoa tốt hơn là sử dụng chữ hoa bên trong. Có hai lý do:
• XAML rất nhạy cảm trong việc phân biệt chữ, bởi vì nó theo chuẩn XML. Cú pháp XAML và những tập lệnh tương đương thường có mặt trong một trang đơn. Vì vậy, nó cần một chuẩn hóa trong XAML. Titling mà bạn thấy trong tài
SVTH: Thân Hoàng Lộc Trang 34 Nguyễn Anh Việt
Lưu Xuân Việt
liệu Silverlight là những biểu mẫu trường hợp chính xác cho một phần tử đối tượng hoặc thuộc tính XAML.
• Quản lý API xử lý tất cả các trường hợp như là trường hợp nhạy cảm, khai báo