【发布时间】:2012-07-29 15:23:56
【问题描述】:
目前的情况:
我正在为支持 Java 的手机(基于 MIDlet 的“哑手机”,而不是 Android)制作一个小型应用程序。该应用程序的结构如下:
- “基础设施”,具有核心功能
- A 类模块(实现接口
ModuleA的类) - B 类模块(实现接口
ModuleB的类)
类型 A 和 B 的模块基本上是根据用户从列表中选择的内容在基础架构中实例化的类,它们以自己特定的方式做事。想想“战略模式”。当用户使用该应用程序时,她浏览了基础设施提供的屏幕,然后来到一个类型 A 的模块列表(查看它们的标题)。然后她选择其中一个模块,该模块被实例化并为她做一些事情。
我的愿望
我想知道是否可以(如果可以,如何)将整个基础架构打包到一个 JAR 文件中,但将 A 类型的模块和 B 类型的模块保留在其他 JAR 文件中,这些 JAR 文件可以安装在设备上未来(如基础设施的附加组件)。我正在考虑这种情况:
- 用户安装基础架构
- 用户安装“Starter”插件,该插件与基础架构同时可用
- 几周后,开发人员创建了一个新的附加组件,例如用户可以安装的“特殊圣诞节模块”,因此已经安装在她的设备上的基础架构将列出插件中的模块
- 一年后,发布了另一个插件,其中包含具有其他功能和想法的模块
首先,此类插件可以安装在移动设备上吗?它们是否必须包含一个 MIDlet 类(什么都不做或通知基础设施)?基础设施能否检测到那些包含我的应用程序附加组件的 JAR?或者基础设施能否与其他 JAR 中的类进行交互?
注意:只有 Infrastructure JAR 会包含有用的 MIDlet 类。此外,附加组件将包含 A 类模块和 B 类模块的任意组合。
可能的解决方案? (虽然不完整)
也许附加组件的外观、行为和气味都类似于设备本身的 MIDlet 应用程序,因此它们可以像任何普通的 MIDlet 应用程序一样安装。附加组件可以将自己声明为与基础设施相同的套件的一部分,因此它们可以通过写入记录存储来通知基础设施的存在(我知道每个 MIDlet 套件都有一个记录存储)。基础设施读取新记录并知道它现在有额外的模块。它能否访问捆绑在附加 MIDlet JAR 中的类并实例化它们?
【问题讨论】: