Android 应用程序和(Android)库架构

4
我正在设计一个Android应用程序,并且有几个问题需要您的意见。
现在,我考虑的架构如下:
- Android应用程序用于用户界面, - 库(Android或“纯”Java)用于业务逻辑, - 用于访问SQLLite数据库的Android库(将被业务逻辑使用), - 用于访问Wifi / BT模块的Android库(将被业务逻辑使用)。
由于很可能在不久的将来会为Win/Mac/Linux开发基于Java的此Android应用程序版本,因此我试图尽量使业务逻辑与特定于Android的API分离。
基本上,业务逻辑将需要使用嵌入式SQLite DB,以及通过Wifi访问Internet并使用BT适配器,这可以使用两个专用的Android库完成。问题是,我希望业务逻辑仅是一个“纯”Java库,而不是构建在Android项目上。根据此架构,是否可行,知道Android应用程序可能会有一个配置“模块”,负责设置和配置并在需要时初始化这两个基于Android的库。
在您看来,当前选择的架构是否有意义?
针对此应用程序,您有什么建议:
- 在DB和BT/Wifi适配器方面具有良好的抽象水平,尽可能模块化, - 使业务逻辑尽可能清晰,远离Android API, - 需要最少的更改才能适应整个经典Java应用程序解决方案。
感谢您提前花费时间和意见。

只需访问此链接 什么是Android?,您就可以了解Android的架构。 - Yugandhar Babu
@YugandharBabu:感谢您提供链接,但这里的问题更多地是尝试将代码最大程度地排除在Android范围之外,使用库来隔离需要访问Android设备硬件或特定功能的最大函数。 - Vincent B.
1个回答

3
我曾经提出过一个类似的问题 - 我想为Android、Blackberry甚至J2ME开发应用程序。我通过分别实现特定于平台的组件(UI、DB访问、网络访问)和核心业务逻辑来实现此目标。核心BL是作为通用的JAR库开发的,我将其分发给Android和BB应用程序。
尽管它起作用了,但我对解决方案并不满意。正如我在这里的回答中所解释的那样,(甚至是我上面第一个问题的答案所提到的),因为BB/J2ME没有跟随Java发行版的更新,我遇到了实际困难。我的Android实现最终使用了大量的“旧”代码(例如,没有泛型)。
话虽如此,既然你下一步的目标是去桌面而不是BB或J2ME,你可能不仅可以使你的Android和桌面Java应用程序之间的设计保持一致,还可以共享实现。
关于抽象化的问题,我建议采用基于接口的业务逻辑和DB逻辑方法。我在上面的第一段中提供的链接显示了如何实现这一简单示例,但我很乐意提供更多细节。

感谢您的回答和链接到我在发布我的问题之前没有找到的先前问题。在我的情况下,用于业务逻辑的JDK版本将是Android支持的最新版本,应该是v1.6,因此桌面平台上的1.6也可以。关于数据访问,是的,系统将得到改进并已简化以提高清晰度。不过,关于核心BL,有没有什么技巧可以在经典Java项目中引用Android库(依赖项或使用android.jar lib)? - Vincent B.
是的 - 正如我所提到的,您不会受到我遇到的JDK版本限制的困扰,这意味着在平台之间更好地重用代码。 - curioustechizen
您可以在传统的Java项目中使用android.jar库 - 这将允许编译,如果您引用了Android特定的类。尽管如此,我不建议采用这种方法。您的核心BL库应该是自包含的,并且也应该独立于实际目标平台进行编译 - curioustechizen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接