干净的架构模式 Android
Clean architecture pattern Android
我已经阅读了一些关于干净架构的一般文档和 Android 特定文档。
我非常喜欢为每个新功能创建一个单独的模块的想法,但我担心的是如何组织我的数据层对象?因为我希望它们可以重复使用。
数据层应该与所有功能模块一起成为一个单独的模块,还是应该将数据层分解为组件作为模块?例如。网络、数据库等的单独模块?
查看此项目以获得 Android 的干净架构框架。 https://github.com/Karumi/Rosie。不过要回答你的问题——我个人将每个模块的网络组件分开,并将它们注入到需要它们的适当功能模块中。例如,假设我正在创建某种推特客户端——我可能有一个 class FeedManager,它公开了获取提要的方法,还有一个 TweetManager,它公开了创建新推文的方法。不过对于这个例子来说有点过分了,因为 FeedManager 和 TweetManager 可能非常小。
提防过早过度架构。拥有一个包含应用程序中每个网络请求方法的网络模块是一种代码味道,并且随着应用程序的增长变得难以维护。但是,如果您的应用很小,那么拥有多个 Network class es 并且每个都做一件小事也可能有点矫枉过正,而且您可能会受益于只有一个网络模块。
另外 - 不要觉得你必须在清洁架构上全力以赴 - 如果适合你的应用程序,可以将多个层合并为一个层。我在尝试实现 VIPER(一种干净的架构衍生产品)'by the book' 时犯了这个错误,结果每个功能都有几个额外的 classes,除了将数据传递到下一层外,它们基本上什么都不做,并且维护起来很麻烦。对于需要将关注点分离到极致的大型复杂项目来说,干净的架构可能是天赐之物,但对于我见过的大多数 Android 应用程序,更简单的 MVC、MVVM 或 MVP 就足够了。
首先我要纠正的是,您的包架构应该基于功能而不是您提到的模块架构。
其次,为了容纳所有与数据库相关的东西,只需为其创建一个专用的 pakcage。
这是其中一个项目的截图。也许它会对你有所帮助。
没有架构,干净与否来统治它们。没有 1 种正确的做事方式。
我最好的建议是在你自己的项目中使用这些不同的想法,并不断迭代和改进它们,直到你有一个适合你的良好基础。尝试实施一些东西,然后退后一步,回顾你的工作,看看哪些有效,哪些可以做得更好。
我可以给你一堆链接,但听起来你已经阅读了其中的大部分内容。您无法通过阅读、编码和写下您的发现来学习如何骑自行车!
有很多关于清洁architecture/code等的信息
鲍勃叔叔介绍Clean Architecture
主要思想是不依赖第三方依赖(UI、框架、数据库),方便测试。可以使用层并遵循依赖规则来完成(内层独立于外层)
有设计模式(MVC、MVP、MVVM、VIPER)[About] 通常解决 UI 部分
我建议阅读 Fernando Cejas 撰写的有关清洁架构的系列文章:
我已经阅读了一些关于干净架构的一般文档和 Android 特定文档。
我非常喜欢为每个新功能创建一个单独的模块的想法,但我担心的是如何组织我的数据层对象?因为我希望它们可以重复使用。
数据层应该与所有功能模块一起成为一个单独的模块,还是应该将数据层分解为组件作为模块?例如。网络、数据库等的单独模块?
查看此项目以获得 Android 的干净架构框架。 https://github.com/Karumi/Rosie。不过要回答你的问题——我个人将每个模块的网络组件分开,并将它们注入到需要它们的适当功能模块中。例如,假设我正在创建某种推特客户端——我可能有一个 class FeedManager,它公开了获取提要的方法,还有一个 TweetManager,它公开了创建新推文的方法。不过对于这个例子来说有点过分了,因为 FeedManager 和 TweetManager 可能非常小。
提防过早过度架构。拥有一个包含应用程序中每个网络请求方法的网络模块是一种代码味道,并且随着应用程序的增长变得难以维护。但是,如果您的应用很小,那么拥有多个 Network class es 并且每个都做一件小事也可能有点矫枉过正,而且您可能会受益于只有一个网络模块。
另外 - 不要觉得你必须在清洁架构上全力以赴 - 如果适合你的应用程序,可以将多个层合并为一个层。我在尝试实现 VIPER(一种干净的架构衍生产品)'by the book' 时犯了这个错误,结果每个功能都有几个额外的 classes,除了将数据传递到下一层外,它们基本上什么都不做,并且维护起来很麻烦。对于需要将关注点分离到极致的大型复杂项目来说,干净的架构可能是天赐之物,但对于我见过的大多数 Android 应用程序,更简单的 MVC、MVVM 或 MVP 就足够了。
首先我要纠正的是,您的包架构应该基于功能而不是您提到的模块架构。 其次,为了容纳所有与数据库相关的东西,只需为其创建一个专用的 pakcage。
这是其中一个项目的截图。也许它会对你有所帮助。
没有架构,干净与否来统治它们。没有 1 种正确的做事方式。
我最好的建议是在你自己的项目中使用这些不同的想法,并不断迭代和改进它们,直到你有一个适合你的良好基础。尝试实施一些东西,然后退后一步,回顾你的工作,看看哪些有效,哪些可以做得更好。
我可以给你一堆链接,但听起来你已经阅读了其中的大部分内容。您无法通过阅读、编码和写下您的发现来学习如何骑自行车!
有很多关于清洁architecture/code等的信息
鲍勃叔叔介绍Clean Architecture
主要思想是不依赖第三方依赖(UI、框架、数据库),方便测试。可以使用层并遵循依赖规则来完成(内层独立于外层)
有设计模式(MVC、MVP、MVVM、VIPER)[About] 通常解决 UI 部分
我建议阅读 Fernando Cejas 撰写的有关清洁架构的系列文章: