Android: MVVM 和关注点分离

Android: MVVM and separation of concerns

我即将完成将我的应用程序迁移到具有数据绑定和实时数据的 MVVM(不过仍然 java),现在我拥有的不仅仅是一个体面的架构 Android 应用程序(我正在展示以下)。我对此很满意,但还想更进一步。

谈到干净的架构,我试图弄清楚如何在 Android(数据库、业务、服务等)中进行适当的关注点分离。

我在 .net 和那个平台上工作,你对分离层所做的是为每一层(数据库、业务、演示)创建一个不同的项目,然后你以正确的顺序引用它们,但是项目是大部分是独立的。

在 Android 中,据我所知,您有一个应用程序模块,即使我有一个很好的包聚合,所有内容都“一起”到同一个项目中。

我不确定这是否是真正遵循干净架构原则的最佳方法。我听说过 Dagger,听说你可以用它创建模块,但不确定它是否适合我正在尝试做的事情。

任何 help/hints 关于在 Android 中实现关注点分离的好方法?

我当前的应用结构:

com
    xxx
        xxx
            dto
                class_1_dto.java
                ...
                class_N_dto.java
            helpers
                helper_http.java
                helper_json.java
                helper_utils.java
                helper_enum.java
                helper_file.java
                helper_smtp.java
                helper_date.java
                ...
            model
                model_class_1
                model_class_2
                ...
                all_model_classes_linked_to_AWS_database
            poco
                some_poco_classes
            repository
                aws
                    IAWSDAO
                    AWS_Repository
                    ...
                    all_stuff_related_to_AWS_database_query
                local
                    model_class_1_repo
                    model_class_2_repo
                    ...
                    all_stuff_related_to_SQLite_database_query
            services
                model_class_1_serv
                model_class_2_serv
                ...
                all_stuff_related_to_local_repos_query
            ui
                activities
                    activity_1
                    activity_1_viewmodel
                    activity_2
                    activity_2_viewmodel
                    ...
                    activity_N
                    activity_N_viewmodel
                component
                    custom_view_1
                    custom_view_2
                    ...
                helpers
                    view_helper_1
                    ...
                    view_helper_N
                assets
                res
                ...

您可以通过制作多个模块来分离您的关注点,例如(应用程序、核心、网络、服务、存储库)。就像'app'是一个模块,你可以为每个关注点创建一个独立的模块,你可以使用Koin在模块之间进行依赖注入。

这里有一个例子供参考github repo:

https://github.com/Fahad-github/Bykea-CaseStudy-MusicApp