我正在一个电子商务网站上工作。我正在使用MVVM和Dagger 2遵循干净的体系结构,但是当我们需要在模块之间进行通信时会陷入困境,这意味着我必须从另一个模块调用某些方法和类。实际情况是-有一个单独的模块用于购物车,另一个模块用于类别(由基于类别的产品组成)我在购物车模块中有一些API集(例如addToCart,获取cartList,删除购物车项目等),需要在购物车模块和类别模块中调用(addToCart API需要从类别模块调用)。一种实现方式是在两个模块中再次编写相同的代码,这会增加额外的工作量,并使两个模块都依赖于代码,这违反了干净的体系结构方法。
有人可以在干净的体系结构中为我建议最好的方法吗?
您可以使用共享代码创建一个新模块,并将其添加为两个模块(购物车和类别)中的依赖项,如果您已按层进行了模块化,则可以对数据层执行相同的操作,因此如果在另一个模块中需要相同的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
}
}
您可以使用共享代码创建一个新模块,并将其添加为两个模块(购物车和类别)中的依赖项,如果您已按层进行了模块化,则可以对数据层执行相同的操作,因此如果在另一个模块中需要相同的API如果您只使用某些部分,则可以将其添加为依赖项或将其拆分为新模块。
implementation project(':common_apis_module')
在干净的体系结构中,如果您从一个模块发出请求,这被理解为不同的用例,如果在两种情况下都需要从模型中获取相同的数据,也许您还需要在一个通用模块中共享UseCase。