需要澄清在 Clean Code + MVVM 中数据模块中库依赖项的使用 (Android)
Need Clarification on the Usage of library dependencies inside Data module in Clean Code + MVVM (Android)
我非常熟悉 android 中的 MVVM 架构模式。更进一步说,我正在按照简洁代码原则 (SOLID) 开展我的下一个项目。我将整个应用程序分为三个模块。 1) 应用程序(演示+框架) 2) 数据 3) 领域。我怀疑我是否可以在数据模块中保留库依赖项(即 Firebase)。现在,我正在使用界面来访问与应用程序相关的内容,例如共享首选项、位置获取器、改造等。
我需要从数据模块中获得类似 AuthResult
的值。为此,我需要在数据模块的 Gradle 文件中添加 Firebase 依赖项。我认为这将违反 高层模块不应依赖于低层模块规则。
谁能帮我解释一下?
在浏览了几篇关于 MVVM + Clean Code 的文章后,我得出结论,我不能在 domain
或 data
模块中使用与 android framework
相关的任何依赖项。否则将违反 SOLID.
的 Dependency Inversion 原则
依赖倒置原则
Higher level module should not be dependent on Lower level modules, and both should be dependent on abstraction.
英文 -> 您不能直接从数据或域层访问框架相关组件,如数据库、gps、改造等。他们不应该关心那些东西。它们应该完全独立于 android 相关组件。我们可以使用接口来满足抽象规则。
因此,我的 data module
和 domain module
仅包含语言依赖项。无论我想要什么 android-框架相关的数据,我都通过实现 interfaces
.
来获取它
我非常熟悉 android 中的 MVVM 架构模式。更进一步说,我正在按照简洁代码原则 (SOLID) 开展我的下一个项目。我将整个应用程序分为三个模块。 1) 应用程序(演示+框架) 2) 数据 3) 领域。我怀疑我是否可以在数据模块中保留库依赖项(即 Firebase)。现在,我正在使用界面来访问与应用程序相关的内容,例如共享首选项、位置获取器、改造等。
我需要从数据模块中获得类似 AuthResult
的值。为此,我需要在数据模块的 Gradle 文件中添加 Firebase 依赖项。我认为这将违反 高层模块不应依赖于低层模块规则。
谁能帮我解释一下?
在浏览了几篇关于 MVVM + Clean Code 的文章后,我得出结论,我不能在 domain
或 data
模块中使用与 android framework
相关的任何依赖项。否则将违反 SOLID.
依赖倒置原则
Higher level module should not be dependent on Lower level modules, and both should be dependent on abstraction.
英文 -> 您不能直接从数据或域层访问框架相关组件,如数据库、gps、改造等。他们不应该关心那些东西。它们应该完全独立于 android 相关组件。我们可以使用接口来满足抽象规则。
因此,我的 data module
和 domain module
仅包含语言依赖项。无论我想要什么 android-框架相关的数据,我都通过实现 interfaces
.