Android 应用程序架构 - 建议的模型是啥? [关闭]

Posted

技术标签:

【中文标题】Android 应用程序架构 - 建议的模型是啥? [关闭]【英文标题】:Android application architecture - what is the suggested model? [closed]Android 应用程序架构 - 建议的模型是什么? [关闭] 【发布时间】:2011-03-20 05:32:11 【问题描述】:

同样,Web 或桌面应用程序可能具有三层或 n 层 - 例如 UI、业务、数据 - android 应用程序的建议结构是什么?您如何将课程分组在一起,您有哪些图层等?

我刚开始使用 Android 开发(一个必须响应传入通知的基于互联网的应用程序)并且对我所针对的结构没有真正的感觉。建议表示赞赏。

【问题讨论】:

即使这个问题可以追溯到很久以前,它仍然没有选择的答案,这可能对那些仍然有问题的人没有帮助。我相信@pcjuzer 的回答非常好并且回答了这个问题。对于那些想了解更多细节的人,我在这里写了一系列文章:digigene.com/android-architecture-wolfkcats2 【参考方案1】:

恕我直言,Android“想要”遵循 MVC 模式,但视图和控制器通常真正耦合在活动中。

它使单元测试更难,并且很难遵守Single Responsibility Principle。

我找到了a really nice Android architecture presented here,可能有一个想法。一切都是松散耦合的,因此更容易测试和编辑。

显然,我确信还有很多其他可能性(例如 MVP 模式 (Model View Presenter) - 和 here are answers talking about MVP in Android),但您仍然应该看看它。

【讨论】:

Android "wants to" follow a MVC pattern怎么来的?【参考方案2】:

我已经在 Android 上工作了 9 个月,从服务器端背景开始,完整的单元测试和分层架构很常见并且运行良好。

经过大量试验和错误,我强烈建议使用Model View Presenter 模式,而不是模型视图控制器。

我发现的一个大问题是Activities/Fragments 的生命周期超出了您的控制范围,可能会导致意外问题。

例如,我们的主要 android 应用希望在平板电脑上以横向模式使用。我们在OnCreateView()OnCreate() 中执行此操作。

在 Nexus 7 上,默认视图是纵向的,所以它以纵向模式启动 Activity,然后我们的代码说转到横向,android 最终创建 activity 类 3 次!

我们已将网络请求连接到 onCreate,在这种情况下它们最终会发生 3 次。

当然,我们可以添加逻辑来查找重复调用,但我认为,在架构上尝试将 UI 与业务逻辑分开会更好。

我的建议是使用工厂模式从活动中创建演示者,但要确保工厂只返回相同的实例。 Presenter 可以包含执行网络请求、查找重复项并返回缓存结果和一般业务逻辑的逻辑。

当网络调用的结果返回时,要么发布到活动(在 onResume() 上注册事件并在 onPause() 期间取消注册)已注册到的总线(例如 Otto),要么确保回调接口由活动已更新为演示者中的最后一个活动。

这样,presenter 向下的代码是可单元测试的,并且不依赖于不稳定的 UI 层测试。

【讨论】:

【参考方案3】:

Android 中的操作、视图和活动是与 Android UI 一起工作的基础,是模型-视图-视图模型模式的实现,该模式在结构上与模型视图控制器相似(属于同一家族)。

据我所知,没有办法打破这种模式。可能可以做到,但您可能会失去现有模型的所有优势,并且必须重写您自己的 UI 层才能使其正常工作。

您可以在以下位置找到 MVC:

您可以通过分辨率/硬件等在各种 XML 文件中定义您的 user interface。 您可以通过语言环境等在各种 XML 文件中定义您的 resources。 您将数据存储在SQLite 中或您的自定义数据存储在/assets/ 文件夹中,阅读更多关于resources and assets 您扩展了ListActivity、TabActivity 之类的类,并通过inflaters 使用XML 文件 您可以为模型创建任意数量的类,并拥有自己的包,这些包将充当结构 已经为你写了很多Utils。数据库实用程序,html

没有你可以遵循的单一 MVC 模式。 MVC 只是或多或少地声明你不应该混合数据和视图,例如视图负责保存数据或处理数据的类直接影响视图。

但是,尽管如此,Android 处理类和资源的方式,有时您甚至不得不遵循 MVC 模式。在我看来,更复杂的是那些有时负责视图但同时又充当控制器的活动。

如果您在 xml 文件中定义视图和布局,从 res 文件夹加载资源,并且如果您避免或多或少地在代码中混合这些内容,那么您无论如何都遵循 MVC 模式。

【讨论】:

你没有回答他的问题。您已经回答了有关用户界面架构的问题。我认为他的问题更多是关于全局应用程序架构:我们是否应该制作单独的层,例如 Presentation (=MVC)、Business Logic 和 Data persistence。这种模式在 Web 应用程序中很常见。 同意@clemp6r。【参考方案4】:

MVP 是大多数人关注的最新架构 Here is the small documentation 正如 Uncle Bob 的简洁架构 所说,“架构是关于意图,而不是框架”

Watch this video 这真是令人难以置信的好。

【讨论】:

【参考方案5】:

这里是Android Architecture blueprints 的专用项目,源代码有据可查。所有这些都基于 MVP 模式,但有几个曲折。还要检查基于代码行数、可测试性、学习成本的各种解决方案的comparison,以及它们对增加数据复杂性的支持。这取决于特别开发的应用程序和最适合蓝图的环境(上市时间、开发人员、未来计划等)。

【讨论】:

以上是关于Android 应用程序架构 - 建议的模型是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

企业级Android应用架构设计与开发 完整版

EF框架的优点是啥?

EF框架的优点是啥?

构建应用程序架构(活动和片段)的最佳方式是啥

在 MVVM 架构 Android 中启动服务的正确位置是啥

是否有在基于 DDD 的分层架构中的模型和数据访问层之间使用 LINQ 的建议模式