2014年3月17日 星期一

透過Xamarin撰寫一致性的Web資料擷取開發方式 - Sharing篇

 

在前兩篇"透過Xamarin撰寫一致性的Web資料擷取開發方式 - iOS篇"與"透過Xamarin撰寫一致性的Web資料擷取開發方式 - Android篇"當中,我們完成了要如何利用WebClient在iOS App與Android App當中開發Web資料擷取的方式。

 

 

But…

如果我們Web資料擷取的程式邏輯有改變,或者Web的連線位址有改變,那我們不就要在iOS的專案當中改完以後,又要到Android的專案當中修改一次嗎?!

這樣實在是太麻煩了!!!

 

看倌,您實在是太難滿足了,能夠寫相同的程式碼在不同的平台專案上,已經是Xamarin帶來的大大便利以及大大增進開發效率了呢!!!

沒關係!!!您的心聲....Xamarin聽到了,更正確地說Xamarin就是因為這樣的需求孕育而生的。

 

接下來,就讓我們來看Xamarin是如何來滿足看倌的心聲吧!!!

 

1. 先讓我們來將之前的"MutiOSWebClientDemo”方案加入一個類別庫專案,命名為"MutiOS.Sharing"好了。

 

image_thumb

2

 

2. 修正一下新增好的"MutiOS.Sharing"類別庫,將預設建立出來的類別變更為如下狀況:

 

3

(綠色框為修改的部分)

 

3. 接著我們在原本的AndroidWebClientDemo與iOSWebClientDemo這兩個專案上"Add Project Link…"到這個MutiOS.Sharing專案。

 

4

(若右鍵選單尚無出現Add Project Link的選項,請見參考資料的連結1安裝"Project Link")

 

image

 

4. 若加入的過程當中看到以下錯誤訊息,直接按略過即可。

 

image_thumb9

 

5. 加入完畢的成果。

7

 

這樣有什麼好處???看倌可以自行閱讀參考資料的連結2,來了解使用Project Linker的好處與方便性。

 

但在這邊對我們來說就是透過Project Linker來在我們的專案當中參考共用到"MutiOS.Sharing"專案的程式碼!!!

也就是說,我們只要將有關於Web資料擷取的相關邏輯以及連線位址等等的程式,寫在這個MutiOSWebClient.cs當中,那我們只要改這一份,參考的專案就可以直接採用變更,再也不需要個別維護各個不同專案當中的相同程式碼了!!!

 

而為了因應個平台UI的程式撰寫方式不同,我們必須再調整之前的程式碼,來讓MutiOSWebClient能夠順利的被共用。

 

所以,接下來重頭戲開始啦!!!

 

首先,先打開MutiOS.Sharing底下的"MutiOSWebClient.cs"加入以下程式碼:

 

8

(紅色框為新增的部分。)

 

再繼續新增一個非同步呼叫的GetWebMessageAsync()的方法:

 

image_thumb14

(紅色框為新增的部分,注意綠色框是使用了與之前不同的操作方法。)

 

接著打開AndroidWebClientDemo專案當中的"MainActivity.cs",請跟著以下這樣做:

 

10

(紅色框為新增的部分。)

 

image

(紅色框為新增的部分,綠色框為修改部分。)

 

image_thumb17

(紅色框為新增的部分。)

 

修改完畢。試著編譯執行看看吧~~~

 

image_thumb21

 

順利的得到跟之前Android App當中所撰寫的程式有相同結果了。

 

接著打開iOSWebClientDemo專案當中的"MainViewController.cs",再次請跟著以下這樣做:

 

13

(紅色框為新增的部分。)

 

image

(紅色框為新增的部分,綠色框為修改部分。)

 

image_thumb24

(紅色框為新增的部分。)

 

修改完畢。試著編譯執行看看吧~~~

 

iOS_1_thumb

 

順利的得到跟之前iOS App當中所撰寫的程式有相同結果了。

 

上述完成之後,我們就要來體驗一下,共用程式碼的強大威力了!!!

 

再次打開MutiOS.Sharing底下的"MutiOSWebClient.cs",並且修改為以下的程式碼:

 

image_thumb26

(綠色框為修改的部分。)

 

接著,直接試著對兩個平台的App各別編譯執行看看,將會感受到神奇的效果!!!

 

image_thumb45image_thumb47

 

沒錯,看倌你沒看錯!!!

 

我們真的只修改那一次的程式碼(代表Web抓取資料的程式邏輯的改變),兩個平台的App編譯執行後,所呈現的文字就都改變了。

 

Jack,這真的太神奇了吧!!!

 

嘿嘿~~~

 

看倌...若你也覺得神奇的話...

就趕緊來體驗Xamarin的奇幻魔力吧~~~

 

PS 在這邊我們所展示的只是Xamarin其中的一種共用程式碼(only for Visual Studio)的方式"Project Linker",若有興趣的看倌,可以再延伸閱讀參考資料的連結3,學習Xamarin其他的共用程式碼的作法,有任何心得也記得跟大家分享喔!!!

 

PS' 如果要多了解非同步的await與async概念,請閱讀參考資料連結4。

 

範例下載連結: (檔名:VS_Xamarin_MutiOSWebClientDemoApp_Sharing)
http://1drv.ms/1cPBKun

 

參考資料:

1. Project Linker Download for Visual Studio 2012:
http://visualstudiogallery.msdn.microsoft.com/273dbf44-55a1-4ac6-a1f3-0b9741587b9a

2. Project Linker: Synchronization Tool:
http://msdn.microsoft.com/en-us/library/ff921108(v=pandp.20).aspx

3. Sharing Code Options:
http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/sharing_code_options/

4. Metro Style App與.NET 4.5中的非同步程式設計概念:
http://studyhost.blogspot.tw/2012/06/metro-style-appnet-45.html

沒有留言:

張貼留言