JessYanCoding / ArmsComponent

📦 A complete android componentization solution, powered by MVPArms (MVPArms 官方快速组件化方案).
Apache License 2.0
1.69k stars 243 forks source link

RouterHub 不能自动生成路由表吗? #6

Closed hongxialiu closed 6 years ago

hongxialiu commented 6 years ago

RouterHub 不能自动生成路由表吗?不然每个组件得手动添加,太麻烦了

JessYanCoding commented 6 years ago

路由表 ARouter 会自己生成, RouterHub 只是用于储存常量, 功能仅仅是辅助 ARouter 便于统一管理和查看整个项目的路由地址, 在组件间跳转时很方便, 很明显你可以不这样做, 并没有强制要求你必须把所有组件的路由地址都统一写在 RouterHub 里, 若你觉得麻烦可以每个组件自行管理路由地址, 只要遵守 ARouter 的使用方式即可

hongxialiu commented 6 years ago

其实你可能没有明白我的意思,或者我表达不是特别清楚。实际项目组件化开发过程中,组件都是相互隔离的,就是感觉手动在底层比如RouterHub写会比较麻烦,想的是这种手动写的东西,能不能自动化,比如自动生成路由表

JessYanCoding commented 6 years ago

我知道你的意思,上面说了路由表是由 ARouter 生成,这里只是储存常量,为什么要常量?你跳转方要知道路由地址才能跳转,你被跳转方要给 Activity 命名路由地址,并且和跳转方传入的路由地址匹配才能跳转成功,所以两个组件引用同一个常量,便于管理,降低出错率,如果你两个组件都直接使用字符串, 两个组件又是不同的人维护,这难免会出现一些的问题,路由表只是建立路由地址和 Activity 的映射关系,和这个 RouterHub 并没有关系, 你提供了正确的路由地址才能生成路由表

JessYanCoding commented 6 years ago

RouterHub 存在于基础库,可以被看作是所有组件都需要遵守的通讯协议,里面不仅可以放路由地址常量,还可以放跨组件传递数据时命名的各种 Key 值,再配以适当注释,任何组件开发人员不需要事先沟通只要依赖了这个协议,就知道了各自该怎样协同工作,既提高了效率又降低了出错风险,约定的东西自然要比口头上说强

这里的麻烦是为了集中管理路由地址,便于组件跳转,降低出错率,当然上面也说了你可以不需要在基类中管理同一个常量,你可以自己在每个组件中自己管理,那当然了,这样的做的话,你要从 A 组件跳转到 B组件的某个页面,那你 A 组件需要声明一个路由地址常量, B 组件也需要声明一个路由地址常量, 你上面也说了两个组件都互相不可见,也有可能不是同一个人维护,那谁又能保证两个组件的路由地址常量里面的值是一样的呢

如果你觉得把每个路由地址都写在基础库的 RouterHub 中,太麻烦了,我们可以稍微优化一下,在每个组件内部建立一个私有 RouterHub,将不需要跨组件的路由地址放入私有 RouterHub 中管理,只将需要跨组件的路由地址放入基础库的公有 RouterHub 中管理

另外,现在的事情很多,所以没时间做这里的自动化,也许你可以试试