我计划在iOS,Android和AngularJS网站上创建一个应用程序.
但是,由于不必在每个应用程序上重写业务代码,我希望尽可能多地重用代码.
为了能够在任何平台上执行项目的核心,我必须使用Web语言.
通过不同的文章,我计划一个通用的架构来分离项目的业务逻辑 – 核心 – 与将为每个系统重新实现的UI(UIKit for iOS,AngularJS和Polymer for webapp等)
该体系结构的目标是尊重重要的软件工程原理,如information hiding by decomposing requirements in modules,DRY和SOLID
>每个功能都将在模块中分解.
>核心:业务逻辑代码 – 可在每个平台上重复使用 – 将以库的形式表示.
>视图:将在每个不同平台上开发视图类,以使用每个平台上提出的不同UI元素.例如:用于iOS的Objective-C / Swift中的ViewController的子类或用于操作web-app的HTML的简单类.这堂课没有逻辑.它只负责:
> IView:抽象操纵视图的类的接口.
> Presenter:Interactor和View之间的链接以驱动UI.
> Interactor:模块的逻辑,例如算法.
>数据存储:通过与数据库或API或Web服务通信来管理数据的持久性和提取.
>模型:数据以结构表示.
这里是iOS(几乎与Android相同):
如本文所示,“核心”代码将通过虚拟机执行:http://www.skyscanner.net/blogs/developing-mobile-cross-platform-library-part-3-javascript
这里是AngularJS:
现在您已经了解了有关架构的所有信息,以下是我的问题.
我没有足够的经验和对网络语言的反馈,无法做出明智的选择.经过一些研究,我发现有各种选择:
>飞镖:
>问题1:是否存在允许Objective-C / Swift与Java通过VM实现互操作的机制?我知道两个平台都有VM来执行Javascript代码,而Google提供dart2js来编译Dart到Javascript代码.但它不是简单的Javascript:请参阅示例here.所以我不知道是否还有适当的互操作性.
> Javascript ES6:如果事件尚未在浏览器中完全实现,则可以开始使用带有Traceur编译器的ES6.
>问题2:Traceur和iOS / Android中的VM编译的Javascript是否具有互操作性?
>问题3:通过Traceur使用ES6开发大型项目并拥有生产代码是否“安全”?
谢谢你的阅读.
C到Java / Objective-C API生成器:
https://github.com/dropbox/djinni
适用于Android / iOS的示例“原生”应用:
http://oleb.net/blog/2014/05/how-dropbox-uses-cplusplus-cross-platform-development/
更新答案:
如果你真的不想使用C并且你可以从非本机获得膨胀,那么你可以尝试以下方法:
https://github.com/MobileChromeApps/mobile-chrome-apps
该项目是Google的Cordova分支,增加了许多新功能和优点.
Chrome API上有一个Dart包装器:
https://github.com/dart-gde/chrome.dart
基本上,您可以使用纯HTML5技术在Dart中编写应用程序,然后对于某些事项,您可以使用Chrome API(设备状态等).然后你可以部署:
> Web:在没有Chrome API功能的情况下编译为JavaScript.
> Chrome操作系统:使用Chrome API功能编译为JavaScript.
> Android:编译为JavaScript,然后使用MobileChromeApps创建Android应用程序.
> iOS:编译为JavaScript,然后使用MobileChromeApps创建iOS应用程序.