android - 哪种是整洁架构中模块之间通信的最佳方法

标签 android mvvm dagger-2 modular clean-architecture

我在电子商务网站上工作。我遵循 MVVM 和 Dagger 2 的整洁架构。但是当我们需要在模块之间进行通信时我会卡住,这意味着我必须从一个模块调用另一个模块的一些方法和类。 实际情况是 - 购物车有一个单独的模块,类别有另一个模块(由基于类别的产品组成)
我在购物车模块中有一些 API(例如 addToCart、获取购物车列表、删除购物车项目等)需要在购物车模块和类别模块中调用(addToCart API 需要从类别模块调用)。 一种方法是在两个模块中再次编写相同的代码,这将增加额外的工作量并使两个模块都依赖,这违反了整洁的架构方法。

谁能建议我在整洁的架构中最好的方法。

最佳答案

您可以使用共享代码创建一个新模块并将其添加为两个模块(购物车和类别)中的依赖项,如果您按层进行模块化,则可以对数据层执行相同的操作,因此如果您需要相同的 API另一个模块,您可以将其添加为依赖项,或者如果您只使用某些部分,则将其拆分为新模块。

    implementation project(':common_apis_module')

在整洁的架构中,如果您从一个模块发出请求,它被理解为不同的用例,如果您需要在两种情况下从模型中获取相同的数据,那么您可能需要在一个公共(public)模块中共享 UseCase。

在 common_apis_module 中为模块之间的通信创建接口(interface)。

    interface CommunicationModule1 {
    fun doSomethingInModule1(someParam: String)
    fun doAnotherThingInModule1(anotherParam: Int)
}

并在第二个模块中创建另一个与上述相同的通信接口(interface)。 然后你在两个模块中添加了那个公共(public)模块,你将能够使用两个模块中的接口(interface)。 我建议使用 Dagger 。

    class OneClassInModule2 : DaggerAppCompatActivity{

    @Inject
    late init var communicationModule1 : CommunicationModule1

}

第二类:

class OneClassInModule1: CommunicationModule1 {
  override fun doSomethingInModule1(someParam: String){
    // Do Something with the string
  }
}

关于android - 哪种是整洁架构中模块之间通信的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58613388/

相关文章:

android - 检测 Android TV 上的 HDMI 服务是否已启动

java - 如何使用 Fragment 关联 webView 和 listView 项目

wpf - WPF 的 MVVM 模式 - 再次绘制 2d 图

android - DaggerMock - 如何让 Dagger 在测试用例中提供对象

Android Canvas 重做和撤消操作

java - 如何导入 javax.annotation.Nullable?

c# - 防止 DataGrid 更新 MVVM 中的选定项

.net - 通过MVC Web API传输完整对象的好策略是什么?

java - Dagger 2 使用不同的 URL 构建多个 Retrofit 实例,以便使用构造函数注入(inject)来访问不同的 API

android - 如果您尝试整洁架构,使用 Dagger 的最佳方法是什么?