Android MVVM 按功能打包或按层打包哪个更好?

Which is better for Android MVVM package by feature or package by layer?

另一个 "which is better" 问题,我知道这些是非常主观的。我对更好的定义是:

  1. 被最好的开发团队使用
  2. 最适合单元测试
  3. 最模块化/最容易构建产品应用程序
  4. Google推荐什么(这是我最困惑的地方)

所有 Android 蓝图都使用按功能打包:

https://github.com/googlesamples/android-architecture

/tasks
/addedittask
/taskdetail

和所有架构组件样本逐层使用:

https://github.com/googlesamples/android-architecture-components

/db
/model
/ui
/persistence

我很困惑,因为在架构组件站点的底部,它实际上有指向 Android MVP 和 MVVM 蓝图示例的链接,这在我看来是矛盾的。

我认为这取决于项目规模。同样在不同的公司团队使用不同的方法。

I prefer to use in a small project second type of package managing.

如果您想重用 ModelView 组件,只需将它们保留在功能包中即可。也许这种类型:

/db
    feature1/
    feature2/
/model
    feature1/
    feature2/
/ui
/persistence
    feature1/
    feature2/

基于Android Architecture guide, and on Clean Architecture,我建议采用这种方法

data/
    model/
    remote/
    local/
    Repository
domain/
    usecases/
        GetUserListUseCase
presentation/
    screen1/
        screen1Activity
        screen1Fragment
        screen1ViewModel
    screen2/
        screen2Activity
        screen2Fragment
        screen2ViewModel
core
    common/
    di/

更多信息:https://www.toptal.com/android/android-apps-mvvm-with-clean-architecture