basquang™ on clouds

March 29, 2010

WPF: thư viện phát triển giao diện kế tiếp Windows Form

Filed under: WPF — basquang @ 9:30 AM

WPF (Windows Presentation Foundation) là một thư viện lập trình giao diện đồ họa có trong Microsoft .NET frame work từ phiên bản 3.0. Được xây dựng trên nền Direct3D, WPF phát huy tối đa sức mạnh xử lý của card đồ họa, hỗ trợ các cải tiến về giao diện trong Windows Vista, Windows 7 và độc lập với mọi độ phân giải của màn hình. WPF kế thừa và mở rộng các đặc trưng phát triển ứng dụng bao gồm: ngôn ngữ đánh dấu ứng dụng mở rộng (Extensible Application Markup Language – XAML), controls, tác hợp dữ liệu (data binding), bố cục (layout), đồ họa 2-D và 3-D, hoạt hình, kiểu dáng (styles), mẫu (templates), tài liệu, Figure 1 Ứng dụng HealthCaređa phương tiện (âm thanh, hình ảnh), văn bản, và in ấn. Một ứng dụng WPF có thể được biên dịch để chạy trên desktop hoặc thông qua trình duyệt web phổ biến như IE, Firefox, Safari. Do đó WPF không chỉ dành cho các ứng dụng desktop, nó còn cho phép phát triển các ứng dụng web phong phú (Rich Internet Application – RIA). Ngoài ra WPF cung cấp một mô hình lập trình nhất quán cho việc phát triển các ứng dụng và cung cấp một sự tách biệt rõ ràng giữa giao diện người dùng (UI – User Interface) và logic nghiệp vụ (business logic).

Mặc dù WPF đã được giới thiệu được khoảng 3 năm, xong vẫn có rất nhiều câu hỏi được đặt ra để cân nhắc việc sử dụng WPF. Hầu hết chúng ta đều cho rằng các ứng dụng Web đang thống trị thế giới ứng dụng hiện nay. Hay chúng ta so sánh lợi ích với việc sử dụng các công nghệ hiện có như Windows Form. Thực tế đã chứng minh rằng các ứng dụng desktop vẫn được phát triển mạnh mẽ vì tính sẵn dùng, tính bảo lưu trạng thái (stateful) giữa các giao dịch, độ tin cậy, bảo mật dữ liệu và khả năng phát huy tối đa hiệu xuất của phần cứng.

Kết hợp khéo léo với các thư viện thiết kế chuẩn Microsoft Enterprise Library hay Composite WPF, nhà phát triển có thể xây dựng nhiều loại ứng dụng đa dạng có tính bảo trì tốt, giao diện đồ họa chuyên nghiệp như: Phân phối chứng khoán, nhập liệu, các dịch vụ của chính phủ, các ứng dụng cho thủ quỹ ngân hàng, các ứng dụng cho trung tâm chăm sóc khách hàng, phần mềm mua bán chứng khoán, hay các phần mềm y khoa…

WPF là nền tảng thống nhất cho việc xây dựng giao diện ứng dụng người dùng Windows

Figure 2 Bảng đối chiếu các công nghệ hiện có trong WPFTrước WPF, xây dựng một ứng dụng Windows với nhiều yêu cầu phức tạp đòi hỏi việc sử dụng rất nhiều công nghệ khác nhau.

Để tạo ra ứng dụng với các Forms và Controls các lập trình viên thường chọn Windows Forms. Tuy nhiên nếu ứng dụng đòi hỏi một số các tính năng riêng biệt như: hình ảnh 2 chiều, 3 chiều, đa phương tiện (âm thanh và hình ảnh)… chúng ta cần thêm các thư viên như GDI+, Windows Media Player, DirectX… Điều này trở nên phức tạp và rắc rối, khó bảo trì. Trong khi chúng ta có thể sử dụng WPF để phát triển ứng dụng mà có thể đáp ứng được tất cả các yêu cầu trên. Vậy tại sao chúng ta không sử dụng một nền tảng công nghệ cố định, duy nhất để xây dựng ứng dụng giao diện người dùng, hơn là sử dụng các công nghệ độc lập với nhau một cách phân tán.

Các lập trình viên và nhà thiết kế làm việc với nhau hiệu quả hơn

WPF sử dụng XAML (eXtensible Application Markup Language) để thể hiện giao diện. XAML định nghĩa một tập các thành phần (elementFigure 3 Tương tác giữa nhà thiết kế và lập trình viên thông qua XAML) XML như Button, TextBox, Label… để xác định cách thức hiển thị của các controls trên giao diện. Rõ ràng diễn tả giao diện dưới dạng XML sẽ dễ dàng hơn đối với việc mô tả chúng bằng code. Ngoài ra XAML có thể được sửa đổi bằng rất nhiều các công cụ phát triển như Visual Studio, Expression Blend,XAMLPad… Do đó WPF cho phép các thành viên của đội phát triển và đội thiết kế có thể làm việc với nhau trên cùng một file mà không cần phải thông qua một file ảnh tĩnh như trước đây. Theo cách này một nhà thiết kế có thể xây dựng các giao diện phức tạp sử dụng công cụ thiết kế Expression Blend. Toàn bộ thiết kế sẽ được công cụ sinh ra các thể hiện dưới dạng XAML. Một nhà phát triển chỉ việc sử dụng các đoạn mã XAML này với một công cụ như Visual Studio 2008, mà không cần phải thiết kế lại, để viết các xử lý logic cho ứng dụng. 

WPF mang những lợi ích của công nghệ Web đến với ứng dụng Desktop

Figure 4 Data templateFigure 5 Control templateWPF cho phép thay đổi bất cứ thứ gì trên giao diện của ứng dụng một cách dễ dàng và tùy ý thông qua các mẫu (Template). Chúng ta có thể định nghĩa lại cách hiển thị truyền thống của các control, cũng như cách mà một đối tượng (object) được hiển thị trên giao diện.

WPF tạo ra sự đột phá trong việc thể hiện giao diện một cách hiện đại, thông minh và lộng lẫy thông qua việc sử dụng Style. Style trong WPF giống như CSS trong HTML, tuy nhiên chúng giàu tính năng và rõ ràng hơn. Với việc hỗ trợ Style, các ứng dụng WPF dễ dàng được làm mới bộ mặt, kiểu dáng mà không phải thay đổi đến code, không phải biên dịch lại. Bởi lẽ WPF quản lý chúng (Style) thông qua những thuộc tính được định nghĩa trong XAML.

Figure 6 Style trong WPF

WPF đem những lợi ích của công nghệ Desktop client tới Web

Figure 7 Ứng dụng WPF cho trình duyệt: XBAPVới WPF, chúng ta có thể tạo ra các ứng dụng cho cả Windows và Web. WPF sử dụng XBAPs (XAML browser applications) để tạo ra những ứng dụng mà có thể thực thi bên trong trình duyệt. Những ứng dụng này kết hợp các đặc trưng của cả các ứng dụng Web và Desktop. Nó có thể được triển khai trên một máy chủ Web và được thực thi thông qua trình duyệt Web. Các ứng dụng XBAPs hỗ trợ nhiều trình duyệt khác nhau như IE, Firefox. Giống như phát triển các ứng dụng Desktop, XBAPs thúc đẩy các điểm mạnh của WPF, và mang những lợi ích của các công nghệ Desktop lên môi trường Web.

Tuy nhiên việc thực thi XBAPs yêu cầu .NET framework 3.0 được cài đặt trên hệ thống. Nếu đó là một trở ngại, chúng ta có thể sử dụng Silverlight thay thế. Silverlight là một thành phần con mở rộng của WPF. Thực tế nó được đặt với một cái tên khác là WPF/E (WPF/Everywhere). Do đó các lập trình viên có thể dễ dàng chuyển đổi giữa WPF client và Silverlight. Các ứng dụng Silverligth giống như XBAPs, được thực thi thông qua trình duyệt Web. Nó là một thành phần gắn bên trong của trình duyệt, nó hỗ đa nền tảng (cross- flatform) do đó có thể được sử dụng ở bất kỳ môi trường hệ điều hành nào.

WPF tương thích với mọi độ phân giải màn hình, hỗ trợ in ấn hiệu quả

Khi tạo giao diện cho ứng dụng, chúng ta sắp xếp các controls theo vị trí và kích cỡ của chúng trên khuôn bố cục của ứng dụng. Một yêu cầu chủ chốt với hầu hết các ứng dụng là tính tương thích với các thay đổi về kích cỡ và độ phân giải của màn hình. Việc triển khai yêu cầu này thực sự trở thành vấn đề đối với Windows Form. Tuy nhiên, điều này trở nên dễ dàng hơn với WPF. Các controls trong WPF được xử lý một cách tự động để có thể tương thích với mọi độ phân giải của màn hình. Hình ảnh được phóng to, thu nhỏ một cách dễ dàng mà không gặp phải vấn đề như vỡ khung hình đối với Windows Forms

Figure 8 Xử lý font chữ và document trong WPFNgoài ra những yêu cầu về trình bày văn bản (text), tài liệu (document) và in ấn là không thể thiếu đối với các ứng dụng phục vụ mục đích kinh doanh. Text ở trong WPF được xử lý và hiển thị sử dụng Microsoft ClearType, khiến chúng trở nên rõ ràng và dễ đọc hơn. Với các văn bản, WPF cung cấp khả năng xử lý linh hoạt tùy thuộc vào mục đích sử dụng của chúng. Các nội dung hiển thị, chúng được tối ưu hóa để việc đọc trở nên dễ dàng hơn. Toàn bộ nội dung được tự động điều chỉnh sao cho phù hợp với kích thước màn hình, độ phân giải của thiết bị cũng như ý muốn của người dùng. Ngược lại, với các nội dung được in ấn, chúng được thiết kế để độc lập với các thiết bị hiển thị và in ấn. Cấu trúc của trang in luôn luôn thống nhất theo thiết kế của người dùng trong mọi trường hợp, đồng thời tận dụng tối đa chất lượng của thiết bị in. WPF cũng cấp sẵn bộ thư viện cho việc quản lý và thực hiện in. Nó cho phép tự động cài đặt , điều khiển, tìm kiếm và thiết lập các lựa chọn in ấn của máy. Do đó việc in ấn trở nên thuận tiện và hiệu quả hơn rất nhiều.

WPF giảm thiểu số dòng code được viết cho ứng dụng

Hầu hết các ứng dụng cung cấp cho người dùng khả năng truy cập dữ liệu xem và sửa đổi. Thông thường yêu cầu này được thực hiện thông qua các bước bao gồm:

– Sao chép dữ liệu từ các đối tượng được quản lý lên các control để chúng có thể được hiển thị và được thay đổi.

– Đảm bảo các thay đổi về mặt dữ liệu trên các control được sao chép ngược trở lại các đối tượng được quản lý.

Công việc xử lý logic cho giao diện như vậy chiếm một thời gian và số lượng code đáng kể của các ứng dụng ngày nay. Với WPF quá trình này được thực thi một cách tự động thông qua cơ chế gép dữ liệu (Data Binding).

Lấy ví dụ để thực hiện đưa dữ liệu về một Person lên form:

Phía giao diện trước đây:

Là một loạt các đoạn mã để khởi tạo giao diện cho các control

Phía mã thực thi trước đây:

   1: Person person = new Person("Quang", "Nguyen");
   2: public Window1()
   3: {
   4:     InitializeComponent();       
   5:  
   6:     //Đưa dữ liệu và các control một cách thủ công
   7:     this.txtFirstName.Text = person.FirstName;
   8:     this.txtLastName.Text = person.LastName;
   9:     this.tblFullName.Text = person.FullName;            
  10: }

WPF phía giao diện: Khai báo dữ liệu được gắn cho các control thông qua XAML

   1: <Window x:Class="WithBinding.Window1"
   2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:     Title="With Binding" Height="212" Width="300">
   5:     <Grid Name="grid" >
   6:         <!--Bind txtFirtName cho Person.FirstName-->
   7:         <TextBox Name="txtFirstName" Text="{Binding Path=FirstName}" />
   8:         <!--Bind txtLastName cho Person.LastName-->
   9:         <TextBox Name="txtLastName" Text="{Binding Path=LastName}" />
  10:         <TextBlock Name="tblFullName" Text="{Binding Path=FullName}" />
  11:     </Grid>
  12: </Window>

WPF phía mã thực thi:

   1: Person person = new Person("Quang", "Nguyen");
   2: public Window1()
   3: {
   4:     InitializeComponent();
   5:     //Đưa nguồn dữ liệu sẵn sàng cho binding
   6:     this.DataContext = person;
   7: }

WPF tách biệt phần hiển thị với phần logic của ứng dụng

Cơ chế Data Binding trong WPF khiến toàn bộ quá trình hiển thị giữ liệu lên các control giao diện được xử lý một cách tự động mà không cần đến sự can thiệp của các đoạn mã phía sau của control này. Các lập trình viên chỉ cần sử dụng các mã được quản lý (managed code) như C# hay VB.NET để truy cập và xử lý giữ liệu mang tính nghiệp vụ. Điều đó khiến phần xử lý logic của ứng dụng tách biệt hoàn toàn với phần hiển thị giữ liệu, nên tính độc lập cho các thành phần này. Chúng ta có thể tách việc phát triển giao diện và xử lý logic thành các module bởi đội phát triển khác nhau. Những thay đổi về mặt giao diện không làm ảnh hưởng đến những xử lý nghiệp vụ của ứng dụng và ngược lại. Hơn nữa, nó cũng tạo điều kiện dễ dàng cho việc thực hiện Unit Test đối với giao diện của ứng dụng. Một công việc mà rất khó thực hiện đối với các công nghệ trước đó như Windows Form.

WPF tiết kiệm chi phí cho việc triển khai ứng dụng

WPF cung cấp nhiều công cụ thuận tiện cho việc triển khai, cài đặt tùy thuộc vào kiểu ứng dụng. Với các ứng dụng thuần túy XAML files, mà không cần phải biên dịch, chúng ta có thể triển khai chúng trên websites như với ASP.NET thông thường. Với các ứng dụng trình duyệt web XBAPs, chúng ta sử dụng dòng lệnh (command-line) trong XCopy hoặc đóng gói bằng Windows Installer để cài đặt cho khách hàng. Với các ứng dụng chạy độc lập (standalone) chúng ta có thể đóng gói thông qua Windows Installer hoặc ClickOnce để triển khai cho khách hàng. Giống như Windows Installer, ứng dụng được triển khai sử dụng ClickOnce, có thể tích hợp với Desktop, Start menu, dễ dàng cài đặt và gỡ bỏ thông qua “Add/Remove Programs control panel” trên máy khách hàng. Ngoài ra ClickOnce còn cho phép ứng dụng được cài đặt trực tuyến thông qua web. Tạo điều kiện thuận lợi cho khách hàng cập nhật các phiên bản của phần mềm nếu có. Tiết kiệm chi phí đáng kể trong việc triển khai ứng dụng cho cả nhà phát triển cũng như là khách hàng.

Kết luận

Có rất nhiều công nghệ để bạn có thể lựa chọn cho việc phát triển các ứng dụng Windows hiện nay như Windows Form, Visual C++/MFC, Win32, WPF. Trong đó phải kể đến Windows Form, một công nghệ “form over data” được sử dụng rộng rãi và lâu đời – xấp xỉ 20 năm – bởi tính dễ dùng và nhỏ gọn. Hay Visual C++/MFC (Microsoft Foundation Classes), một công nghệ cho các ứng dụng đòi hỏi sự can thiệp sâu vào hệ thống, yêu cầu thư viện tối thiểu và mang lại một tốc độ tốt. Chúng sẽ vẫn được khách hàng tin dùng và vẫn nhận được sự hỗ trợ từ phía các nhà phát triển Microsoft, trong vài năm tới. Tuy nhiên với sự ra đời của Windows 7, hệ điều hành đang được khách hàng đón nhận một cách nồng nhiệt; đặt ra thách thức với các nhà phát triển phần mềm về một thế hệ ứng dụng kế tiếp. Những ứng dụng với giao diện tân tiến, tích hợp nhiều công nghệ hiển thị đồ họa, tận dụng tối đa sức mạnh của phần cứng, đáp ứng tốt các yêu cầu phổ biến hiện nay như đa phương tiện, hoạt hình và hơn nữa là độ tin cậy, dễ phát triển và bảo trì, tiện dụng khi triển khai. Công nghệ WPF mang lại cho các nhà phát triển thêm một công cụ hữu hiệu để đáp ứng xu hướng mới.

Nguyễn Bá Quang
Email: basquang@hotmail.com

Bài viết đăng trên báo Thế giới vi tính số ra 12/2009 trong chuyên mục Công nghê

Advertisements

1 Comment »

  1. I am really grateful to the owner of this site who has shared this enormous paragraph at at this place.

    Comment by Sử dụng Visual Studio để lập trình C/C++ — September 24, 2014 @ 10:44 AM | Reply


RSS feed for comments on this post. TrackBack URI

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

Blog at WordPress.com.

%d bloggers like this: