答案 0 :(得分:16)
恕我直言,Android“希望”遵循MVC模式,但查看&控制器通常真的耦合在一起。
它使单位测试更难,并且很难服从Single Responsibility Principle。
我发现a really nice Android architecture presented here,可能有一个想法。一切都松散耦合,更容易测试和编辑。
显然,我确信还有很多其他的可能性(比如MVP模式(Model View Presenter) - 和here are answers talking about MVP in Android),但你仍然应该看看它。
答案 1 :(得分:16)
我现在已经在Android上工作了9个月,从服务器端背景来看,完整的单元测试和分层架构很常见并且运行良好。
通过大量的试验和错误,我强烈建议使用Model View Presenter
模式,而不是模型视图控制器。
我发现的一个重大问题是,Activities
/ Fragments
的生命周期超出了您的控制范围,可能导致意外问题。
例如,我们的主要Android应用程序希望在平板电脑上以横向模式使用。我们在OnCreateView()
或OnCreate()
。
在Nexus 7上,默认视图是肖像,所以会发生的是它以纵向模式启动活动,然后我们的代码说到横向和android最终会创建activity
类3次!
我们已将网络请求连接到onCreate
,在这种情况下,它们最终会发生3次。
当然,我们可以添加逻辑来查找重复调用,但在我看来,在架构上尝试将UI与业务逻辑分开会更好。
我的建议是使用工厂模式从活动创建演示者,但要确保工厂只返回相同的实例。然后,演示者可以包含执行网络请求的逻辑,查找重复项并返回缓存结果和一般业务逻辑。
当来自网络呼叫的结果返回时,要么发布到诸如Otto之类的总线,该活动(在onResume()
上注册事件并在onPause()
期间注销)已注册,或确保回调活动实现的界面已更新为演示者中的最后一个活动。
这样,presenter
向下的代码是可单元测试的,不依赖于片状UI层测试。
答案 2 :(得分:15)
答案 3 :(得分:7)
MVP 是大多数人关注的最新架构 Here is the small documentation正如 Bob叔叔干净的架构所说,“架构是关于意图,而不是框架”
Watch this video这只是令人兴奋的事情。
答案 4 :(得分:2)
以下是Android Architecture blueprints的专用项目,其中包含详细记录的源代码。所有这些都基于MVP模式,有几个曲折。还要根据代码行,可测试性,学习成本以及对增加数据复杂性的支持来检查各种解决方案的comparison。这取决于特别开发的应用程序和上下文(上市时间,开发人员,未来计划等)哪个蓝图最适合。