This post has 0 Replies | 0 Followers

Top 25 Contributor
Posts 39
phiendichvien Posted: 09-26-2009 12:21 PM

MSDN
 : Các điểm dữ liệu

Truy cập dữ liệu từ một ứng dụng điện thoại di động
Tác giả:John Papa
Đoạn mã code có thể tải xuống tại DataPoints2008_01.exe (179 KB)
Xem đoạn mã Online
Các nội dung chính

Phát triển các ứng dụng điện thoại di động
Bắt đầu
Sự gắn tự động
Sự gắn vào các trường
Những sự lựa chọn gắn di động
Tinh chỉnh ứng dụng di động của bạn
Những suy nghĩ cuối cùng.


Truy cập dữ liệu là một yếu tố quan trọng trong việc phát triển các ứng dụng với nền tảng Microsoft® .NET Compact Framework dành cho các thiết bị di động của Windows.Bằng cách sử dụng kiến trúc hệ thống đang tồn tại sẵn có để gửi và nhận dữ liệu giữa ứng dụng di dộng của bạn với server ứng dụng của bạn,bạn có thể truyền dữ liệu bằng DataSets, bằng các đối tuợng tự tạo,hoặc các giá trị vô hướng.

Trong phần báo này tôi muốn thảo luận những bài thực hành tốt nhất cho chiến luợc truy cập dữ liệu khi phát triển các ứng dụng di động cho Smartphones.Tôi sẽ minh họa làm thế nào để thiết kế một ứng dụng Smartphone lái dữ liệu ,cái có thể hiện thị và lưu dữ liệu qua mạng.Tôi sẽ chỉ cho bạn làm thế nào để liên lạc với một ứng dụng máy chủ ,cái sẽ hé lộ các phuơng thức để lấy dữ liệu sử dụng một DataSet,các đối tuợng tự tạo và một danh sách các thực thể chung (generic List<T> of entities).


Phát triển các ứng dụng điện thoại di động


Các công cụ quan trọng cho việc phát triển di động

* .NET Compact Framework 2.0 SP2
* Windows Mobile 6 Professional and Standard SDKs
* Windows Mobile 5.0 SDK for Smartphone
* Windows Mobile 5.0 SDK for Pocket PC
* ActiveSync 4.5 (Windows XP)
* Windows Mobile Device Center (Windows Vista)
* Microsoft Device Emulator 2.0
* Windows Mobile 6 Emulators
* Windows Mobile 5.0 Smartphone Emulators
* Windows Mobile 5.0 Smartphone Emulator with Landscape Screen
* Windows Mobile 5.0 Pocket PC Emulators
* Motorola Q Emulator




Để phát triển các ứng dụng di động,bạn đầu tiên phải cài đặt .NET Compact Framework(và gói dịch vụ mới nhất của nó).Những sự cập nhật mới nhất là .NET Compact Framework 2.0 với SP2.
Truớc khi tiếp tục ,bạn phải có một số sự quyết định về nền tảng (Windows Mobile 5.0 hay Windows Mobile 6) và thiết bị bạn sẽ nhắm tới cho ứng dụng của bạn.Những quyết định này sẽ ảnh huởng đến bộ công cụ phát triển SDK bạn phải cài đặt.


Windows Mobile 5.0 SDK là có thể tìm thấy trong các phiên bản khác nhau,tùy thuộc vào liệu bạn đang nhắm tới thiết bị Smartphone,Pocket PC hay một Pocket PC Phone.Windows Mobile 6.0 SDK ngòai ra cũng có thể tìm thấy trong phiên bản khác nhau dành cho các nền tảng mục tiêu khác nhau,nhưng cách đặt tên đã thay đổi ít nhiều.Hình minh họa 1 liệt kê các phiên bản SDK khác nhau và các thiết bị nào mà chúng nhắm tới.Có thể nói rằng nếu bạn muốn nhắm tới mỗi loại thiết bị này,bạn phải cài đặt mỗi SDK này cho từng thiét bị đó.

Hình minh họa 1 - Các bộ công cụ Windows Mobile SDK



Trong sự thảo luận này,tôi sẽ sử dụng windows Mobile 5 cho Smartphone.Mặc dù vậy,nên nhớ,phiên bản không mang tính quyết định vì các khai niệm truy cập dữ liệu đựợc giới thiệu ở đây duy trì như nhau bất kể là phiên bản nào.
Sau khi cài đặt .NET Compact Framework 2.0 với SP2 và bộ công cụ phát triển Windows mobile tuơng ứng,bạn phải cài đặt ActiveSync (cho Windows® XP) hoặc Windows Mobile Device Center (cho Windows Vista®).Đó là những thứ cần thiết cho trình giả lập thiết bị di động liên lạc với mạng của bạn qua internet.
Bạn cũng nên tải xuống và cài đặt một trình giả lập ,cái là giống với thiết bị di động mà bạn đang nhắm tới nhất.Với bài báo này,tôi sẽ chọn một màn hình có kích cỡ 320*240.Nếu thiết bị mục tiêu của bạn có kĩch cỡ màn hình khác nhau,bạn nên kiểm tra ứng dụng của bạn cho mỗi cái, sử dụng tất cả các trình giả lập tuơng ứng.
Nếu bạn đang sử dụng Windown Vista hay Windows Mobile 6 SDK,bạn cần cài đặt trình giả lập thiết bị Device Emulator phiên bản 2.0. Tôi biết rằng ,điều này có vẻ khá rắc rối để tìm đúng phần mình cần cài đặt,vì vậy tôi đã đính kèm một danh sách các link cùng với cột báo này trong việc tải xuống các bộ công cụ phát triển và bạn có thể tìm thấy nó trên website tạp chí MSDN tại địa chỉ sau: msdn.microsoft.com/msdnmag/issues/08/01/datapoints.


Bắt đầu
Tôi hết sức khuyên bạn kiểm tra trên cả các trình giả lập di động và chính bản thân thiết bị di động của nó để tránh những tình huống khi ứng dụng làm việc tốt trên trình giả lập những không làm việc tốt trên thiết bị di động.Giải pháp của tôi là sử dụng trình giả lập xuyên suốt quá trình phát triển một ứng dụng di động,sau đó triển khai ứng dụng tới một thiết bị di động thật sự cho một sự kiểm tra chắc chắn.
Truơc khi tháo gỡ các lỗi,hãy chắc chắn rằng bạn chạy trình giả lập Device Emulator từ
menu Công cụ trong Visual Studio®.Sau khi bạn chọn trình giả lập bạn muốn,kích chuột phải lên nó,và chọn Connect.Trình giả lập sau đó sẽ bắt đầu khởi động Smartphone.Ngay sau khi Smartphone đang chạy trong trình giả lập,kích chuột phải vào mục trong Device Manager và chọn Cradle.Cradle cho phép trình giả lập liên lạc với mạng.Cuối cùng,trong Visual Studio,chọn một trình giả lập từ danh sách xổ xuống trong thanh công cụ các thiết bị (Device toolbar)
.(Xem hình minh họa 2)


Hình minh họa 2- Chọn một trình giả lập mục tiêu

Để lấy dữ liệu,ứng dụng mẫu của tôi liên lac với một dịch vụ web (Web service) nằm trên một IIS Web server.Web service làm việc tốt cho các ứng dụng di động,vì nó có thể truyền cả các đối tượng ADO.net,như DataSet và các thực thể tự tạo.Đầu tiên ,tôi tạo ra một dự án Web service project và thêm một WebService đuợc gọi là CustomerWebService.Tôi thêm ba phuơng thức tới WebService và thêm mỗi phưong thức với cùng thuộc tính WebMethod :

[WebMethod]
public Customer GetCustomer(string customerID) {
...
}

[WebMethod]
public DataSet GetCustomerDataSet(string customerID) {
...
}

[WebMethod]
public List<Customer> FindCustomerList() {
...


Phưong thức GetCustomer lấy ra một bản ghi Customer đơn lẻ trong dạng của một thực thể tự tạo.Phương thức GetCustomerDataSet cũng lấy ra một bản ghi Customer đơn lẻ nhưng phương thức này trả lại bản ghi Customer trong một DataSet.Phương thức FindCustomerList lấy ra một danh sách các khách hàng Customer,trả lại một List<Customer>,do vậy,tận dụng đuợc những ưu thế của các thực thể customer và các bộ sưu tập chung (generics).Đoạn mã đầy đủ cho Web service này được đính kèm trong mã có thể tải.
Ngay sau khi webservice đuọc tạo ra,tôi thêm một ứng dụng Windows Mobile 5.0 Smartphone tới giải pháp.Nếu bạn cài đặt cả Windows Mobile 5.0 và Windows Mobile 6 SDK,bạn có thể chọn ứng dụng mục tiêu từ hộp thoại này.Còn cho dự án,tôi sẽ tạo ra một ứng dụng thiét bị Windows Mobile 5.0 Smartphone.
Ứng dụng Smartphone sẽ có một dạng bắt đầu, cái sẽ hiện thị một danh sách khách hàng trong một danh sách xổ xuống.Nguòi dùng có thể chọn một trong những khách hàng và sau đó chi tiết về khách hàng đó sẽ đuọc hiện thị trong một trang khác.Danh sách khách hàng đuợc lấy ra từ phuơng thức FindCustomerList của Web service,cái sẽ mang một List<Customer> tới form bắt đầu. Danh sách sau đó có thể đuọc gắn tới danh sách xổ xuống bằng tay hoặc tự động.(Tôi sẽ minh họa cả hai công nghê này một cách ngắn gọn.)


Gắn tự động

Mẫu form CustomerPicker là màn hình đầu tiên nguời sử dụng sẽ nhìn thấy.Tôi thêm một danh sách xổ xuống tới form này và đặt tên nó là ddlCustomer.Tôi muốn tận dụng những ưu điểm của việc gắn tự động và gắn danh dách xổ xuống của tôi tới List<Customer> ,cái tôi sẽ lấy từ phuong thức web FindCustomerList của tôi.Tôi thêm một nguồn dữ liệu mới tới dự án,chọn kiêu thực thể cái bạn muốn gắn tới danh sách xổ xuống (dropdown list).Vì tôi ám chỉ đến web service của tôi,ứng dụng biết cái kiểu thực thể nào cái các phuơng thức web service của tôi sẽ trả lại.Điều này làm cho việc gắn tới dropdown list với những thực thể có định kiểu trở nên mạnh mẽ.
Tôi đi tới của sổ Data Sources và kích lên nút Add New Data Source.Điều này làm nổi lên một thuật sĩ cài dặt.Tôi chọn Add an object type,kích next và xác định thực thể Customer của tôi từ danh sách đuợc cung cấp (xem hình 3).Nếu bạn không nhìn thấy các thực thể của bạn trong danh sách khi thêm một nguồn dữ liệu mới,hãy chắc chắn rằng bạn đầu tiên đã biên dịch dự án web service đó thành công và sau đó quay trở lại và thử lại thêm nguồn dữ liệu.Khi một thực thể đuợc vén ra bởi Web service,nó sẽ không xuất hiện trong danh sách nếu như DLL của nó đã không đuợc biên dịch truớc.




Hình 3.Tạo ra một nguồn dữ liệu Customer

Ngay sau khi nguồn dữ liệu đã đuọc thêm,tôi kéo nguồn dữ liệu Customer Data Source (xem hình 4) từ cửa sổ Data Sources tới danh sách xổ xuống (dropdown list).Điều này tự động tạo ra mọt control BindingSource trên form có tên là ustomerBindingSource,và nó kiểm soát cách gắn hai chiều của thực thể tới các controls.



Hình 4. Sử dụng một nguồn dữ liệu customer


Có nhiều hơn 2 buớc để cài đặt sự gắn tự động truớc khi tôi có thể kiểm tra ứng dụng của tôi trong trình giả lập.Buớc kế tiếp là thiết lập các thuộc tính DisplayMember và ValueMember của dropdown list.Tôi thiết lập thuộc tính DisplayMember tới CompanyName và thuộc tính ValueMember tới CustomerID.Vì nguồn dữ liệu là đuọc định kiẻu mạnh mẽ,những giá trị thuộc dropdown list này sẽ nằm trong cửa sổ thuộc tính cho control dropdown list.
Buớc cuối cùng là nói cho control BindingSource nơi để lấy dữ liệu của nó.Điều này đơn giản như tạo một một thực thể cuả lớp web service đại diện,gọi phuơng thức tuơng ứng,và thiết lập sự trả lại List<Customer> tới thuộc tính DataSource của control BindingSource như sau:


private void CustomerPicker_Load(object sender, EventArgs e)
{
using (RemoteService.CustomerWebService svc =
new RemoteService.CustomerWebService())
customerBindingSource.DataSource = svc.FindCustomerList();
}


Tại thời điểm này ,bạn có thể chạy ứng dụng và kiểm tra liệu nó có thể hiện danh sách khach hàng trong danh sách xổ xuống không.Hãy chắc chắn rằng bạn đã thiết lập thiết bị mục tiêu trong Visual Studio ,cái bạn đang chạy ActiveSync® hay Windows Mobile Device Center ( tuơng ứng), và rằng thiét bị bạn đang giả lập theo là đuọc sắp đặt đúng (sử dụng Device Emulator Manager)


Gắn các truờng

Sau khi tạo và kiểm tra form CustomerPicker,tôi sẽ tạo ra một form khác có tên là CustomerDetail.Nó sẽ hiện thị chi tiết khách hàng duọc chọn.Tôi thay đổi sự thiét lập nguòn dữ liệu để các control chi tiết đuợc tạo ra khi tôi kéo nguồn dữ liệu Customer tới form,và sau đó tôi điều chỉnh các thuộc tính để hiển thị từ của sổ Data Source.Sau đó,tôi kéo các control tới form CustomerDetail .Hinh 5 cho xem nguồn dữ liệu sau khi tôi đã tinh chỉnh nó.


Hình 5 nguồn dữ liệu đã đuọc tinh chỉnh.

Bây giờ tôi phải lấy bản ghi Customer đuọc lựa chọn từ phuong thức GetCustomer của web service.Tôi sử dụng CustomerID ,cái đuọc chọn từ form truóc đó và gọi phuong thức GetCustomer.Thực thể Customer ,cái đuọc trả lại sau đó đuợc thiết lập tới nguồn dữ liệu của control customerBindingSource trên form CustomerDetail.Bây giờ tôi kiểm tra ứng dụng lần nữa trong trình giả lập,và tôi nhìn thấy màn hình như thấy trong hình mình họa 6 sau.


Hình minh họa 6.Ứng dụng đang chạy trong trình giả lập

Những sự lựa chọn gắn dữ liệu.
Thật là dễ dàng để triển khai sự gắn tự động sử dụng control BindingSource trong một ứng dụng thiết bị di động.Nó làm việc tuơng tự cái cách control BindingSource làm việc trong ứng dụng Windows Forms,với một sự ngoại trừ là nó thiếu control đièu huớng BindingNavigator.Vì các ứng dụng di động không có control BindingNavigator,bạn phải viết các đoạn mã cho việc điều huớng từ một bản ghi tới bản ghi kế tiếp nếu bạn muốn có chức năng đó.Tôi có dự định tránh tính năng đó vì nó tiêu biểu đuọc sử dụng khi lấy ra một danh sách các mục lớn.Điều này có thể làm ảnh huởng đến hiệu quả trong một ứng dụng di động,vì các thiết bị di động thuòng có băng thông truyền dữ liệu bị giới hạn.Vì vậy thiếu một control BindingNavigator không phải là một điều tồi vì nó sẽ nhắc bạn đến việc tiếi kiệm với lưu lượng truyền dữ liệu

BindingSource giúp ta tránh phải lấy các giá trị từ các thực thể bằng tay và gắn nó vào các control trên form.Khi lưu một bản ghi,BindingSource cũng giúp hạn chế sự phức tạp trong việc lấy các giá trị từ các control của form và lôi chúng nguợc lai vào trong một thực thể.Hạn chế của một BindingSource là rằng dữ liệu tải có thể sẽ chậm hơn khi tải dữ liệu bằng tay.
Tôi vẫn khuyên bạn sử dụng control BindingSource nếu như hiệu xuất khác nhau không quá lớn trong suốt sự kiểm tra so sánh .Tuy nhiên,tôi thuòng nhận thấy rằng hiệu suất là như nhau.Việc dùng sự gắn tự động khi bạn sự dụng control BindingSource là rất hữu ích khi bạn cần gắn cùng một tập dữ liệu tới nhiều control.
Thay đổi cách gắn bằng tay là đơn giản.Tất cả điều cần phải làm là tháo bỏ control BindingSource ,xóa sự thiết lập nguồn dữ liệu của các control trên form và viết một số mã để tải mỗi giá trị bằng tay từ thực thể vào các control tuơng ứng như thế này:


using (RemoteService.CustomerWebService svc =
new RemoteService.CustomerWebService()) {
RemoteService.Customer customer = svc.GetCustomer(_customerID);
companyNameTextBox.Text = customer.CompanyName;
customerIDLabel1.Text = customer.CustomerID;
...
}


Chú ý rằng sử dụng một công nghệ bằng tay,bạn phải quan tâm đến việc làm thế nào để tháo rời dữ liệu từ các control khi nguoi dùng muốn lưu dữ liêu.Nó là một thủ tục đơn giản cho việc lấy các giá trị từ các control và đặt chúng vào trong một thưc thể,nhưng nó là một buớc thêm cái bạn phải kiểm soát khi bạn muốn cho phép nguòi dùng lưu giữ thông tin.Một giải pháp chung với với việc làm bằng tay là lưu giữ thực thể Customêr như là một truòng cá nhân của form CustomerDetail để bạn có thể dễ dàng truy cập nó khi bạn cần lấy dữ liệu ra khỏi các control và đưa nó vào thực thể.

Tinh chỉnh ứng dụng di động của bạn
Vì băng thông có thể bị giới hạn và bộ vi xử lí trên các thiết bị di động cũng chậm hơn các máy tính để bàn,sẽ thật là quan trọng rằng bạn chỉ truyền luọng dữ liệu tối thiểu cần cho ứng dụng.Trong ứng dụng của tôi,tôi đã lấy ra một danh sách thực thể khách hàng,nhưng chỉ 2 trong các thuộc tính đuọc sử dụng.Đièu này làm lãng phí băng thông cho màn hình CustomerPicker vì nó phải đi và lấy tất cả dữ liệu cho tất cả các khách hàng.
Một giả pháp hiệu quả hơn sẽ là tạo ra một phuong thức, cái chỉ lấy ra CustomerID và CompanyName cho mỗi khách hàng.Những sự xem xét như vậy là quan trọng và cần nhớ khi điều chỉnh các ứng dụng di động,vì vấn đề hiệu quả sẽ không thể nhìn thấy trong một ứng dụng để bàn.


Những suy nghĩ cuối cùng.
Truóc khi bạn đào sâu vào việc phát triển di động,thật là quan trọng rằng chính bản thân bạn đã cài đặt đúng những thiết bị cơ bản.Bạn phải chắc chắn rằng bạn có phiên bản quản lý trình giả lập đúng,bộ công cụ SDK đúng và phiên bản cần thiết của ActiveSync hay Windows Mobile Device Center đúng.Khi tôi chạy ứng dụng trên Windows Vista,trình giả lập đã không liên lạc duọc với Web service của tôi cho đến khi tôi cài Windows Mobile Device Center 6.1 và Device Emulator Manager 2..Đó là những sự cập nhật quan trọng đối với phần mềm ,cái phải đuọc cài đặt khi chạy trên Windows Vista, thậm chí khi mục tiêu là Windows Mobile 5.0.
Nếu bạn có gặp phải một lỗi khi cố nhờ ActiveSync để xem trình giả lập của bạn, thì hãy chắc chắn rằng ActiveSync là đuợc thiết lập để liên lạc qua DMA.Nếu bạn gặp một lỗi khi cố gắng truy cập web service của bạn thì hãy chắc chắn rằng web service sử dụng tên server của bạn,trái với localhost.Localhost sẽ luôn làm việc tốt trên máy tính cá nhân của bạn nhưng khi trình giả lập cố gắng hòa nhịp với localhost,nó sẽ không biết cái bạn muốn diễn đạt về server Web máy tính của bạn.Một lời khuyên nữa là hãy chắc chắn rằng bạn kết nối và chọn thiết bị giả lập đúng để nó có thể liên lạc với máy tính cục bộ của bạn.
Nếu bạn cần thông tin về triển khai ứng dụng của bạn tới một thiết bị di động thực tế,hãy đón xem bài báo của tôi vào tháng 12 năm 2006,cái là có thể tìm thấy tại link sau msdn.microsoft.com/msdnmag/issues/06/12/DataPoints).


Gửi những câu hỏi và bình luận của bạn tới mmdata@microsoft.com.
----------------------------------------------------------------------------------------
John papa là một chuyên gia cố vấn cao cấp về .Net cùng với ASPSOFT(aspsoft.com) và là một người hâm mộ bóng chày,anh ta dành hầu hết thời gian những tối mùa hè của anh ta cho việc cổ vũ cho đội bóng chày Yankees cùng gia đình và con chó trung thành của anh ta.John là tác giả của một số cuốn sách về ADO, XML,và SQL Server..Anh ấy thuòng nói chuyện tại những cuộc hội thảo ngành công ngiệp lớn như VSLive hay đang ghi blog tại địa chỉ blog codebetter.com/blogs/john.papa.


EMAIL: NHABIENDICH@YAHOO.COM | | PHIENDICHVIEN@YAHOO.COM

Page 1 of 1 (1 items) | RSS