实现一个方法的时候,总是担心传来的参数不合法,但又不想去写校验,因为很冗余。
一个简单的功能,几行的事,写上一堆校验,方法就变老长了。而且一排方法,每个开头都有一堆验证的if else,看上去画风也很丑是不是?
更别提方法嵌套调用了,A调用B,B调用C,C调用D,如果这4个方法每个内部都写参数校验,那岂不是校验了4遍,多浪费资源?
所以这里面必然要有取舍,或者说规范、原则。
有请大佬们来谈谈这方面都有哪些原则,万分感谢。
实现一个方法的时候,总是担心传来的参数不合法,但又不想去写校验,因为很冗余。
一个简单的功能,几行的事,写上一堆校验,方法就变老长了。而且一排方法,每个开头都有一堆验证的if else,看上去画风也很丑是不是?
更别提方法嵌套调用了,A调用B,B调用C,C调用D,如果这4个方法每个内部都写参数校验,那岂不是校验了4遍,多浪费资源?
所以这里面必然要有取舍,或者说规范、原则。
有请大佬们来谈谈这方面都有哪些原则,万分感谢。
在Python3.5中已经提供了type hints功能
In [1]: def greeting(name: str) -> str:
...: return 'Hello ' + name
...:
...:
In [2]: greeting(name=1)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-a94802c816eb> in <module>()
----> 1 greeting(name=1)
<ipython-input-1-311aff60a9bd> in greeting(name)
1 def greeting(name: str) -> str:
----> 2 return 'Hello ' + name
TypeError: must be str, not int
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
8 回答6.4k 阅读
2 回答2.8k 阅读✓ 已解决
4 回答4.5k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
业务方法信任传入参数,入口方法严格校验参数。
入口方法一般是指得到用户输入的方法,不能信任任何外部输入。
因为业务方法拿到的参数一般情况下不会是入口方法一路直传下来的原始参数,而是经过一系列过滤、转换、判空等校验后的有效值才会走到业务方法,那么只要开发中能界定好业务/入口方法,就可以很大程度减轻参数检验的需要。
当然业务方法可以对部分关键参数进行校验,保证不会出现空指针之类的资源异常即可,在业务流程中发现问题及时终止/回滚也是原则。