我受雇为我的雇主创建的网络服务开发移动框架。理想情况下,管理层希望拥有一些可以在移动平台上共享的可重用组件(最初是iOS和Android,稍后可能是Windows Phone 7)。
我一直在想这是多么可行。其中一个要求是本机界面,因此我们将使用iOS上的Cocoa Touch和无论如何(基于Java)工具集用于为Android创建本机UI。该应用程序将与webservices交互,主要是我们内部创建的那些。 Web服务是在.NET中开发的。
就可重用组件而言,我想我们可以使用一些C ++代码来进行webservice调用,甚至可能使用更多应用程序的后端,但我想知道这是否是一个好方法。 Apple的Foundation Framework具有内置的一些优秀功能来访问Web服务,更不用说其他开源库,例如ASIHttpRequest,SBJSON等...我猜Android也是如此(虽然我现在没有真正的Android体验)。此外,在查看谷歌,Twitter和Twitter等公司所做的项目时Facebook,这些公司中的每一家都提供为主要移动操作系统平台构建的本机库。如果大公司采用这种方法,那么我们似乎合乎逻辑。
也许我们应该更多地关注我们应该跨平台提供的通用架构,而不是可以共享的实现。
有人会建议我们利用C / C ++为我们的网络服务的移动网站开发这样一个框架(共享库)吗?如果是这样,为什么?
答案 0 :(得分:3)
这实际上取决于您希望拥有的自定义代码级别。我之前曾在一家游戏公司工作,我们为iPhone和Android制作了两款游戏,至少有90%的代码库是在c ++代码中的两个平台之间共享的。有时,使用专门的第三方库(如Facebook等)实现元素要容易得多,但维护该代码意味着要继续为两个平台执行此操作。这就是为什么我们甚至用c ++为我们的游戏实现自己的UI对象的原因之一。因为尽管使用Interface Builder和Android的XML可以更容易地进行初始设置,但由于我们使用了共享代码库,因此必须进行维护和调整。
简而言之,我强烈建议在C / C ++中编写任何共享的自定义代码,以及在其原生代码库(java for android或obj-c for iphone)中更容易的事情,并且您不希望改变很多,要保持分开。
答案 1 :(得分: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部分,因此我不得不添加cppdom进行XML解析。如果你使用JSON,有许多好的库,如jsoncpp,libjson。
我要告诉你,即使在桌面环境中,它也比在.net或java中更难做,并且只是这样做,因为它是已经用C / C ++编写的更大应用程序的一部分。
无论如何,你会有更多的工作而没有太大的优势,因为所有这些现代移动平台都提供了做同样事情的丰富库,并且你的API的用户可能会以平台的主要语言开发,所以你将拥有实现WS访问代码和绑定代码的双重额外工作。由于我假设您的逻辑中的所有(或至少大部分)逻辑都在您的服务器中,而不是客户端,因此平台之间没有太多通用代码来证明使用C / C ++。