DSAppTeam/ComponentCornerstone

一看22分钟前提交,我表示心里有点慌

Alvazz opened this issue · 7 comments

啊哈哈,Yummy你好,你这个库,怎么样啊?

无需采用路由等硬编码方式分发sdk,这个能详细说说吗?

业务组件拆分
我们调研其他组件化方案的时候,发现很多组件方案都是把一个业务模块拆分成一个独立的业务组件,也就是拆分成一个独立的Module。而在我们的方案中,每个业务组件都拆分成了一个Export Module和Implement Module,为什么要这样做呢?

  1. 避免循环依赖

如果采用一个业务组件一个Module的方式,如果Module A需要调用Module B提供的接口,那么Module A就需要依赖Module。同时,如果Module B需要调用Module A的接口,那么Module B就需要依赖Module A。此时就会形成一个循环依赖,这是不允许的。

也许有些读者会说,这个好解决:可以把Module A和Module B要依赖的接口放到另一个Module中去,然后让Module A和Module B都去依赖这个Module就可以了。这确实是一个解决办法,并且有些项目组在使用这种把接口下沉的方法。

但是我们希望一个组件的接口,是由这个组件自己提供,而不是放在一个更加下沉的接口里面,所以我们采用了把每个业务组件都拆分成了一个Export Module和Implement Module。这样的话,如果Module A需要调用Module B提供的接口,同时Module B需要调用Module A的接口,只需要Module A依赖Module B Export,Module B依赖Module A Export就可以了。

别担心,因为有些commit是有不能提交的信息,我们在清除而已。

你上述的表述是正确的。想要避开循环依赖,同时不希望一个原来独立的模块被拆分成Export Module和Implement Module,所以我们把Export Module和Implement Module还是回归到原来的模块。实现和接口都应该由维护这个业务模块的人统一管理。分发还是需要,但是不依赖维护路由表或者总线协议,希望能直接依赖类,借助编译特性来直接编程开发,而且任何暴露的东西都会反映到编译上。

总线你可以参考cc和美团的一些实现,路由可以参考阿里的router,就可以明白。

@YummyLau 感谢热心多回复,

这个项目 https://github.com/YummyLau/AndroidModularArchiteture

用的是你这个ComponentCornerstone框架吗?

嗯嗯是的。