我有一个正在开始处理的 android 项目,我希望它的结构尽可能健壮。
我有 WPF MVVM 背景,并且阅读了一些有关 Android 应用程序架构的内容,但我找不到关于我应该使用哪种架构的直接明确的答案。
有些人建议使用 MVVM -http://vladnevzorov.com/2011/04/30/android-application-architecture-part-ii-architectural-styles-and-patterns/ http://vladnevzorov.com/2011/04/30/android-application-architecture-part-ii-architectural-styles-and-patterns/
和其他人建议使用 MVC,但没有具体说明它应该如何实现。
正如我所说,我来自 WPF-MVVM 背景,因此我知道它严重依赖于绑定,据我所知,Android 默认情况下不支持绑定。
似乎有一个第三方解决方案 -http://code.google.com/p/android-binding/ http://code.google.com/p/android-binding/但我不知道我是否愿意依赖它。如果它的开发停止并且未来的 API 等不再支持怎么办?
基本上我正在寻找的是一个全面的教程,它将教我构建应用程序结构的最佳实践。文件夹和类结构等。我只是找不到任何完整的教程,我希望谷歌会为其开发人员提供这样的教程。我只是认为这种文档在技术方面的处理不够好 -http://developer.android.com/guide/topics/fundamentals.html http://developer.android.com/guide/topics/fundamentals.html
我希望我已经说得足够清楚了,我没有要求太多,我只是想在我的代码变成意大利面条怪物之前确定我的应用程序的结构。
Thanks!
首先,Android 并不强迫你使用任何架构。不仅如此,它还使得尝试遵循任何内容都有些困难。这将要求您成为一名聪明的开发人员,以避免创建意大利面条式的代码库:)
您可以尝试适应任何您知道且喜欢的模式。我发现,当您开发越来越多的应用程序时,最好的方法会以某种方式进入您的内心(对此感到抱歉,但一如既往,您将不得不犯很多错误,直到您开始做正确的事情)。
关于您所知道的模式,让我做一些错误的事情:我将混合三种不同的模式,以便您了解 Android 中的功能。我相信 Presenter/ModelView 应该位于 Fragment 或 Activity 中的某个位置。适配器有时可能会完成这项工作,因为它们处理列表中的输入。也许活动也应该像控制器一样工作。模型应该是常规的 java 文件,而视图应该位于布局资源和一些您可能必须实现的自定义组件中。
我可以给你一些建议。这是社区维基的答案所以希望其他人可能会提出其他建议。
文件组织
我认为主要有两种合理的可能性:
- 组织一切type- 为所有活动创建一个文件夹,为所有适配器创建另一个文件夹,为所有片段创建另一个文件夹等
- 组织一切domain(也许不是最好的词)。这意味着与“ViewPost”相关的所有内容都将位于同一文件夹中 - 活动、片段、适配器等。与“ViewPost”相关的所有内容都将位于另一个文件夹中。对于“EditPost”等也是如此。我想活动会强制您创建的文件夹,然后会有一些更通用的基类文件夹。
就我个人而言,我只参与过使用第一种方法的项目,但我真的很想尝试第二种方法,因为我相信它可以使事情更有条理。我认为拥有一个包含 30 个不相关文件的文件夹没有任何优势,但这就是我使用第一种方法得到的结果。
Naming
- 创建布局和样式时,请始终使用使用它们的活动 (/fragment) 的前缀来命名(或标识它们)。
因此,在“ViewPost”上下文中使用的所有字符串、样式、id 都应以“@id/view_post_heading”(例如,对于文本视图)、“@style/view_post_heading_style”、“@string/view_post_greeting”开头。
这将优化自动完成、组织、避免名称冲突等。
基类
我认为您将希望使用基类来完成您所做的几乎所有事情:适配器、活动、片段、服务等。这些至少对于调试目的可能很有用,以便您知道所有活动中正在发生哪些事件。
General
- 我从不使用匿名类 - 这些很丑陋,并且当您尝试阅读代码时会分散您的注意力
- 有时我更喜欢使用内部类(与创建专用类相比) - 如果一个类不会在其他地方使用(而且它很小),我认为这非常方便。
- 从一开始就考虑一下您的日志系统 - 您可以使用 Android 的日志系统,但要充分利用它!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)