与 Web 或桌面应用程序可能具有三个或 n 个层次结构 - 如 UI、业务、数据 等 - 相似,对于 Android 应用程序,建议的结构是什么?如何将类组合在一起,有哪些层级等?
我刚开始进行 Android 开发(一个必须响应传入通知的基于互联网的应用程序),并没有真正了解我要达到的结构。欢迎提供建议。
与 Web 或桌面应用程序可能具有三个或 n 个层次结构 - 如 UI、业务、数据 等 - 相似,对于 Android 应用程序,建议的结构是什么?如何将类组合在一起,有哪些层级等?
我刚开始进行 Android 开发(一个必须响应传入通知的基于互联网的应用程序),并没有真正了解我要达到的结构。欢迎提供建议。
显然,我相信还有很多其他可能性(比如MVP模式(Model View Presenter) - 这里有关于Android中MVP的答案),但你仍然应该看一下它。
我已经从一个服务器端背景工作转到了Android领域,进行了9个月的工作,全面的单元测试和分层架构在服务器端是很常见且有效的。
通过大量的试验和错误,我强烈建议使用Model View Presenter模式,而不是Model View Controller。
我发现一个巨大的问题是Activity/Fragments有一个超出您控制范围的生命周期,可能会导致意外问题。
例如,我们的主要android应用程序想要在平板电脑上使用横向模式。我们在OnCreateView()或OnCreate()中实现这一点。
在Nexus 7上,默认视图是纵向的,所以它会在纵向模式下启动Activity,然后我们的代码说转到横向模式,最终Android会创建三个activity类!
我们已经将网络请求挂钩到onCreate上,但在这种情况下,它们会发生三次。
当然,我们可以添加逻辑来查找重复调用,但在我看来,在架构上将UI与业务逻辑分离会更好。
我的建议是使用工厂模式从Activity创建Presenter,但确保工厂始终只返回相同的实例。Presenter可以包含逻辑来执行网络请求、查找重复项并返回缓存的结果和一般业务逻辑。
当网络调用返回结果时,要么发布到总线(如Otto),该Activity(在onResume()上注册事件并在onPause()期间注销)已经注册,要么确保Activity实现的回调接口已被更新为Presenter中的最后一个Activity。
这样,Presenter以下的代码是可单元测试的,并且不依赖于不稳定的UI层测试。
在Android中,操作、视图和活动是处理Android UI的内置方式,它们是模型-视图-视图模型(MVVM)模式的实现,结构上类似于(同一家族的)模型-视图-控制器(MVC)。
据我所知,没有办法打破这个模型。虽然可能可以做到,但你可能会失去现有模型带来的所有好处,并且必须重写自己的UI层才能使其工作。
以下是可以找到MVC的内容:
并没有一种单一的MVC模式需要遵守。 MVC只是更多或少地说明您不应混合数据和视图,例如视图负责保存数据或直接影响视图的处理数据的类。
但是,安卓处理类和资源的方式有时甚至迫使您遵循MVC模式。在我看来,更加复杂的是活动(activities),它们有时负责视图但同时充当控制器。
如果您在xml文件中定义视图和布局,在res文件夹中加载资源,并且避免在代码中混合这些内容,那么您无论如何都在遵循MVC模式。