meituan / WMRouter

WMRouter是一款Android路由框架,基于组件化的设计思路,有功能灵活、使用简单的特点。
https://tech.meituan.com/meituan_waimai_android_open_source_routing_framework.html
Apache License 2.0
2.31k stars 342 forks source link

关于Router.callMethod方法入参做校验的建议 #37

Closed yinjihao closed 5 years ago

yinjihao commented 5 years ago

通过Demo中的Router.callMethod(path,args)中只要传入对应的路径和方法的入参的个数就可以调用,暴露了一个问题。 以下代码都是WMRouterDemo中的代码 假如我的方法调用原先是: Integer result = Router.callMethod(DemoConstant.ADD_METHOD, 1, 2); 它是两个入参:1,2 而且对应的addMethod方法也是实现的Func2,而且可以正常返回。 但是当我将代码改成: Integer result = Router.callMethod(DemoConstant.ADD_METHOD, 1); 此时它的入参只有:1,但是对应的addMethod方法也是实现的Func2. 当我调用的时候程序会crash. 是因为我并不能感知到对应方法参数名的改变,大体是意思是这个. 请问能有一种比较好的方式解决这个问题吗, 如果不清晰可以加我vx:598941331

jzj1993 commented 5 years ago

Router.callMethod的目的就是减少模块之间的代码耦合,如果希望用Java语法来约束调用方,就可能使得代码耦合增加。

建议方法1:维护一个文档,说明每个方法的参数。就像客户端和后台通信定义的接口文档一样。 建议方法2:在调用方法的模块或者底层封装一个工具方法,工具方法约束好参数,方法里面再调用Router.callMethod。例如:

public class MathUtils {
    public static Integer add(Integer a, Integer b) {
        return Router.callMethod(DemoConstant.ADD_METHOD, a, b);
    }
}