2011-05-02 85 views
2

我被聘爲開發由我的僱主創建的web服務的移動框架。理想情況下,管理層希望擁有一些可在移動平臺上共享的可重用組件(最初iOS iOS & Android,可能稍後會提供Windows Phone 7)。在iOS和Android項目之間共享代碼

我一直在想這是多麼可行。其中一個要求是本機界面,所以我們會在iOS &上使用Cocoa Touch,無論使用哪種(基於Java的)工具集來爲Android創建本機UI。該應用程序將與Web服務進行交互,主要是我們在內部創建的Web服務。 Web服務已經在.NET中開發。就可重用組件而言,我想我們可以使用一些C++代碼來進行web服務調用,甚至更多的應用程序的後端,但我不知道這是否是一個好方法。 Apple的Foundation Framework內置一些優秀的訪問Web服務的功能,更不用說其他的開源庫了,例如ASIHttpRequest,SBJSON等等......我想Android也是如此(儘管我現在沒有真正的Android體驗)。此外,在查看Google,Twitter等公司完成的項目時,這些公司都提供了爲主流移動操作系統平臺構建的本地庫。如果大公司採取這種方法,我們仿效這種做法是合理的。

也許我們應該更多地關注我們應該跨平臺提供的一般體系結構,而不是可以共享的實現。

有人會建議我們利用C/C++爲我們的webservices的移動網站開發這樣一個框架(共享庫)嗎?如果是這樣,爲什麼?

+0

有點困惑,你想分享哪一點?一個Web服務將會有一個標準,比如SOAP。然後,客戶端可以實現對該Web服務的調用,您可以查看AXIS2 for java(對於Android),不確定iOS,但可能有類似的東西。 – ColWhi 2011-05-02 14:48:02

+0

這是關於在移動客戶端上運行的代碼,最好是移動設備的用戶界面後面的大部分代碼。 – 2011-05-02 14:50:32

回答

2

根據您使用的WS協議可能或多或少難以做到,但無論如何,我發現在C/C++中爲移動平臺做這些工作幾乎沒有什麼優勢。 如果您使用SOAP,我甚至不會考慮C/C++,即使是桌面應用程序。我已經使用了C++的SOAP庫,並且它們比Java/.net的對象更難使用,並且它們的實現方式(將SOAP對象映射到C結構)在格式更改時很容易崩潰。更不用說,當WSDL發生變化時,您必須重新編譯您的客戶端。

正如我理解你的情況,你打算使用REST。我從來沒有爲C/C++找到一個好的REST庫,但是最近我做了一個桌面項目,其中我使用WinHTTP(在Windows中)和libCURL(在Linux中)實現了一個C++ REST客戶端。當然,他們只提供HTTP部分,所以我必須添加用於XML解析的cppdom。如果你使用JSON,有很多好的庫,比如jsoncpp,libjson。

我會告訴你,即使在桌面環境下,它的操作也比以前要困難得多。net或java,並且只是這樣做的,因爲它是已經用C/C++編寫的較大應用程序的一部分。

無論如何,你會有更多的工作,沒有太多的優勢,因爲所有這些現代移動平臺都提供了豐富的庫,可以做同樣的事情,並且API的用戶可能會用平臺的主要語言進行開發,所以你會有實現WS訪問代碼和綁定代碼的額外工作。正如我假設你的所有邏輯(或至少大部分)都在你的服務器中,而不是客戶端,所以平臺之間沒有太多的通用代碼來證明使用C/C++的合理性。

+0

是的,我們正在考慮使用JSON格式的RESTful Web服務。我發現了一些支持這個的C++庫,但是我們不清楚這些庫在iOS和Android上的支持情況如何。 – 2011-05-02 15:02:27

+0

通常,基於Linux的庫並沒有太多的依賴關係,因爲它們的基礎是相似的,所以你不得不測試。我已經編譯並在iOS中使用了一些庫,沒有任何問題。心想,從未有過類似的Android體驗。 – 2011-05-02 15:11:11

+0

我想我會嘗試爲iPhone和Android創建一個演示應用程序,該應用程序調用Web服務並使用Web服務調用的共享庫,查看它是如何工作的。我知道Android使用(非標準)提升庫,我可以想象這可能會給一些問題。 – 2011-05-02 15:13:42

3

這真的取決於你想要的自定義代碼級別。之前我曾在一家遊戲公司工作過,我們爲iPhone和Android製作了兩款遊戲,並且至少有90%的代碼是由C++代碼在兩個平臺之間共享的。有時候使用專門的第三方庫(如Facebook等)來實現元素要容易得多,但維護這些代碼意味着要在兩個平臺上繼續這樣做。這就是我們甚至爲我們的遊戲在C++中實現自己的用戶界面對象的原因之一。因爲儘管使用Interface Builder和Android的XML進行初始設置會更容易,但由於我們使用了共享代碼庫,所以維護和調整所需的時間明顯減少了。

總之,我會強烈建議寫在C/C++的任何共享自定義代碼,事情是在他們的原生代碼庫顯著容易(Java進行Android或OBJ-C爲iPhone),你不要指望變化很大,保持分開。

+0

是的,我一直在考慮這方面,對於看起來很有效的遊戲,但我不禁想知道這是否是一種有效的信息應用方法。感謝你的回答,但給我一些想法。 – 2011-05-02 14:52:35

+1

是的,遊戲和信息應用程序在編碼時肯定有不同的要點。我試圖幫助的真正的一點是,您不僅需要考慮實施,還需要考慮維護。 – 2011-05-02 14:54:28

相關問題