关于跨平台项目中网络语言互操作性的问题[已关闭]

2023-12-29

我计划使用 AngularJS 在 iOS、Android 上创建一个应用程序和一个网站。

但为了不必在每个应用程序上重写业务代码,我希望重用尽可能多的代码。

为了能够在任何平台上执行项目的核心,我必须使用网络语言。

通过不同的文章,我计划了一个通用架构,将项目的业务逻辑(核心)与为每个系统重新实现的 UI(用于 iOS 的 UIKit、用于 Web 应用程序的 AngularJS 和 Polymer 等)分开。

该架构的目标是尊重重要的软件工程原则,例如通过模块中分解需求来隐藏信息 http://en.wikipedia.org/wiki/Information_hiding, DRY http://en.wikipedia.org/wiki/Don%27t_repeat_yourself and SOLID http://en.wikipedia.org/wiki/Single_responsibility_principle

  • 每个功能都会被分解为模块。
  • Core:业务逻辑代码 - 可在每个平台上重用 - 将以库的形式表示。
  • View: The view class will be developed on each different platform to use the different UI elements proposed on each platform. E.g.: subclass of a ViewController in Objective-C / Swift for iOS or a simple class to manipulate HTML for the web-app. There is no logic in this class. It is only responsible to:
    • 处理用户与业务逻辑的交互。
    • 显示业务逻辑的内容
  • IView:抽象操作视图的类的接口。
  • 主持人:交互器和视图之间的链接以驱动 UI。
  • 互动者:模块的逻辑,比如算法。
  • 数据存储:通过与数据库、API 或 Web 服务通信来管理数据的持久性和获取。
  • Model:以结构表示的数据。

iOS 版(Android 版几乎相同):

“核心”的代码将通过虚拟机执行,如本文所示:http://www.skyscanner.net/blogs/developing-mobile-cross-platform-library-part-3-javascript http://www.skyscanner.net/blogs/developing-mobile-cross-platform-library-part-3-javascript

这里是 AngularJS:


现在您已经了解了有关架构的一切,这是我的问题。

我对网络语言没有足够的经验和反馈,无法做出明智的选择。经过一些研究,我发现有多种选择:

  • Dart:

    • 问题一:是否存在允许 Objective-C/Swift 和 Java 通过 VM 进行互操作的机制?我知道这两个平台都有 VM 来执行 Javascript 代码,并且 Google 提供了 dart2js 来将 Dart 编译为 Javascript 代码。但这不是普通的 Javascript:参见示例here http://pastebin.com/25P8ugnS。所以不知道还有没有proper互操作性。
  • JavaScript ES6:如果事件尚未在浏览器中完全实现,则可以开始使用 ES6Traceur https://github.com/google/traceur-compiler编译器。

    • 问题2:Traceur 编译的 Javascript 与 iOS/Android 中的 VM 是否具有互操作性?
    • 问题3:通过Traceur使用ES6开发大型项目并拥有生产代码是否“安全”?

感谢您的阅读。


我知道这不是您列出的选项之一,但不会自动排除 C++。例如,这就是 Dropbox 使用的方法,他们甚至为此目的开源了他们的工具:

C++ 到 Java/Objective-C API 生成器:

https://github.com/dropbox/djinni https://github.com/dropbox/djinni

适用于 Android/iOS 的示例“本机”应用程序:

https://github.com/libmx3/mx3 https://github.com/libmx3/mx3

关于该主题的有趣文章有更多链接:

http://oleb.net/blog/2014/05/how-dropbox-uses-cplusplus-cross-platform-development/ http://oleb.net/blog/2014/05/how-dropbox-uses-cplusplus-cross-platform-development/

更新答案:

如果您确实不想使用 C++ 并且可以接受非本地语言带来的臃肿,那么您可以尝试以下操作:

https://github.com/MobileChromeApps/mobile-chrome-apps https://github.com/MobileChromeApps/mobile-chrome-apps

该项目是 Google 的 Cordova 分支,并添加了许多新功能和优点。

这里有一个针对 Chrome API 的 Dart 包装器:

https://github.com/dart-gde/chrome.dart https://github.com/dart-gde/chrome.dart

基本上,您可以使用纯 HTML5 技术在 Dart 中编写应用程序,然后对于某些事情您可以使用 Chrome API(设备状态等)。然后您可以部署:

  • Web:编译为 JavaScript,无需 Chrome API 功能。
  • Chrome 操作系统:使用 Chrome API 功能编译为 JavaScript。
  • Android:编译为 JavaScript,然后使用 MobileChromeApps 创建 Android 应用程序。
  • iOS:编译为 JavaScript,然后使用 MobileChromeApps 创建 iOS 应用程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于跨平台项目中网络语言互操作性的问题[已关闭] 的相关文章

随机推荐