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

谁能为我推荐干净架构中的最佳方法。

最佳答案

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

    implementation project(':common_apis_module')

在干净的体系结构中,如果您从一个模块发出请求,这被理解为不同的用例,如果在两种情况下都需要从模型中获取相同的数据,则可能还需要在一个通用模块中共享UseCase。

在common_apis_module中创建模块之间的通信接口(interface)。
    interface CommunicationModule1 {
    fun doSomethingInModule1(someParam: String)
    fun doAnotherThingInModule1(anotherParam: Int)
}

并在与上述相同的第二个模块中创建另一个通信接口(interface)。
然后在两个模块中都添加了该通用模块,就可以使用两个模块中的接口(interface)。
我建议使用 Dagger 。
    class OneClassInModule2 : DaggerAppCompatActivity{

    @Inject
    late init var communicationModule1 : CommunicationModule1

}

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

09-11 11:08