清洁架构模式 Android

6

我已经阅读了一些关于通用干净架构和特定于Android的文档。

我非常喜欢为每个新功能创建单独模块的想法,但我的担忧是如何组织我的数据层对象?因为我希望它们可以重复使用。

数据层应该与所有功能模块一起成为一个独立的模块,还是数据层应该被分解为组件作为模块?例如:网络、数据库等各自成为独立的模块?


请查看以下链接:https://github.com/android10/Android-CleanArchitecture - hehe
1
我已经看过这个例子了,作者在相关博客文章中提到不要按照他的设计来做。这个例子在顶层有层级,而作者建议在顶层有“特性”。 - geekoraul
4个回答

8
请查看这个针对Android的清晰架构框架项目:https://github.com/Karumi/Rosie。回答你的问题 - 我个人将每个模块的网络组件分开,并将它们注入到需要它们的适当功能模块中。例如,假设我正在创建某种Twitter客户端 - 我可能会有一个FeedManager类,它公开获取Feed的方法,以及TweetManager类,它公开创建新Tweet的方法。但对于这个例子来说,这可能有点过度设计,因为FeedManager和TweetManager可能非常小。
要注意不要过早地进行过度设计。拥有一个单一的网络模块,其中包含应用程序中的每个网络请求的方法是一种代码气味,并且随着您的应用程序增长而变得难以维护。但是,如果您的应用程序很小,则拥有多个每个执行微小任务的网络类也可能过度设计,您可能受益于仅具有单个网络模块。
此外 - 不要觉得您必须完全采用Clean Architecture - 如果合适您的应用程序可以将多个层合并为单个层。在尝试按照书本方式实现VIPER(一种清晰架构衍生品)时,我犯了这个错误,并且为每个功能添加了几个额外的类,这些类基本上什么也没做,只是将数据传递到下一层,这变得非常麻烦。对于大型复杂项目来说,清晰架构可能是一个救星,其中极端的关注点分离是必要的,但对于我见过的大多数Android应用程序而言,更简单的MVC、MVVM或MVP就足够了。

我同意这可能有点过度设计,但使用依赖注入和RxJava实现干净的架构在有效地实现测试(单元测试、仪器测试和UI测试)方面似乎是一个非常可行的选择。很清楚哪个测试适用于代码的哪个部分。如果使用MVC、MVVM或MVP架构,则不太容易实现。 - geekoraul
@geekoraul 对于 MVC 的测试确实很麻烦 - 但是你使用 MVVM 或 MVP 来测试不应该有太多问题,因为大部分逻辑都在 POJO 中。只要将逻辑移出框架类(Activity、Fragment、Service 等),那么单元测试就变得非常容易。 - eliasbagley
1
谢谢你的回答,我会再等待一些其他人的意见,否则就接受你的回答 :) 我真的不知道为什么有人会对这样一个具体的问题进行负评。 - geekoraul
我写了一篇关于Android清洁架构的博客文章。你可能会觉得它很有帮助。https://subash.com.au/android-clean-architecture/ - Subash

2
我想先纠正一下,您的软件包架构应该基于"特性"而不是模块架构,如您所提到的。 其次,为了容纳所有与数据库相关的内容,请创建一个专用的软件包。
这是项目截图之一,可能会对您有所帮助: 这是项目截图之一,可能会对您有所帮助。 参考资料和更多细节: Ref & more detail

2
没有一种架构可以统治所有,无论是干净的还是不干净的。没有一种正确的做事方式。
我最好的建议是在自己的项目中使用这些不同的想法,并不断迭代和改进它们,直到你拥有一个适合自己的良好基础。尝试实现一些东西,然后退一步,回顾你的工作,看看哪些有效,哪些可以改进。
我可以给你很多链接,但听起来你可能已经读过大部分了。你不能通过阅读学会骑自行车,开始编码,写下你的发现!

那段话说得很优美,但我在这里想要讨论一种特定的方法。我正在其中一个迭代中,并需要通过健康的讨论来获得验证。这些迭代需要耗费大量时间,我不愿意仅仅跳进生产级别的项目更改中。 - geekoraul

0

关于清晰架构/代码等方面有很多信息。

Uncle Bob介绍了清晰架构

主要思想是不依赖第三方依赖项(UI、框架、DB)以便于测试。可以通过分层和遵循依赖规则(内层独立于外层)来实现。

有设计模式(MVC、MVP、MVVM、VIPER)[关于]通常解决UI部分

我建议阅读Fernando Cejas的一系列关于清晰架构的文章:


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