这是在干净架构中模块之间进行通信的最佳方法

问题描述 投票:0回答:1

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

有人可以在干净的体系结构中为我建议最好的方法吗?

android mvvm dagger-2 modular clean-architecture
1个回答
0
投票

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

    implementation project(':common_apis_module')

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

为common_apis_module中的模块之间的通信创建接口。

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

并在第二模块中创建另一个与上述通信相同的接口。然后在两个模块中都添加了该通用模块,就可以使用两个模块中的接口。我建议使用匕首。

    class OneClassInModule2 : DaggerAppCompatActivity{

    @Inject
    late init var communicationModule1 : CommunicationModule1

}

第二类:

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

0
投票

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

    implementation project(':common_apis_module')

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

© www.soinside.com 2019 - 2024. All rights reserved.