如您所知,我们可以构建基于flex的RIA应用程序.此外,我们可以构建基于AIR的桌面应用程序.我有一个问题,如果我们想要同时构建Web和桌面应用程序.我们可以使用相同的代码将我们的产品运送到网络和桌面吗?
如果您为它设计应用程序,那么在Flex和AIR版本之间共享99%的代码库应该没有问题.
您将需要一个单独的应用程序MXML用于Flex/AIR版本,因为AIR使用WindowedApplication
和Flex使用Application
您将需要抽象使用任何AIR-only API.也就是说,在线文档中标有AIR-only图标(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/images/AirIcon12x12.gif)的任何类,属性或方法.如果您使用像Swift Suspenders这样的依赖注入容器,您可能会发现此过程更容易.
或者,您可以将服务定义拆分为两个不同的源树.这将导致AIR项目和Flex项目共享一个源路径,但也有自己的源路径.以此方式,代码访问com.application.MyService
会横跨AIR和Flex共享但执行的com.application.MyService
将取决于正在使用哪个"服务源路径"上有所不同.
您可能会发现使用编译器标志配置每个构建很有用-define+=CONFIG::AIR
.这允许您使用条件编译,以便您可以为两个构建编译相同的文件,但包含AIR构建的特定代码.
这是条件编译的例子:
public function getMyService() : IMyService { CONIFG::AIR { return new MyServiceThatUsesAnAIROnlyAPI(); } return new FallbackServiceForFlex(); }
不幸的是,没有办法'否定'一个条件标志(即.!CONFIG::AIR
)所以你需要聪明地使用它,或者包含两个标志(CONFIG::AIR
和CONFIG::FLEX
)