我正在开发一个对象来与API接口。对 API 的某些调用需要身份验证,而其他调用则不需要。就最佳实践而言,应该
一)身份验证方法返回令牌。该方法在调用需要身份验证的 api 调用/方法之前从控制器调用,令牌作为参数传入。
class api {
public function auth() {
.....
return $token;
}
public function getInfo($token) {
.....
}
b)身份验证方法使用令牌设置类的属性,您必须记住在调用需要身份验证的方法之前调用该方法
class api {
private $token;
public function auth() {
.....
$this->token = $token;
}
public function getInfo() {
$token = $this->token;
.....
}
c)需要对身份验证方法本身进行身份验证调用的方法
class api {
private $token;
public function auth() {
.....
return $token;
}
public function getInfo() {
$token = $this->auth();
.....
}
我想上面可以有一个缓存的身份验证作为属性,以保存对身份验证 api 调用的不必要调用。
还是其他方式?只是寻找哪个是此类对象的最佳实践以及原因。提前感谢!
c"是要走的路。
没有其他对象需要知道哪个方法需要身份验证,哪个不需要。
事实上...您的 auth() 方法甚至不应该是公开的,并且凭据"user, pass"应该通过 API 类中的构造函数传递。
参见:http://en.wikipedia.org/wiki/Separation_of_concerns
从长期可维护性的角度来看,在三个可等待的选项中,选项 A 是更好的一个。这是因为您应该测试所有public
方法。 直接传递值,而不是对公共方法进行内部调用,使得为该特定类编写单元测试变得更加容易。
也就是说,身份验证通常是它自己的东西,而不是类的一部分,类也会做其他事情,如本文所述。您示例中的方法让我怀疑您违反了 SRP。
更新
现在我想到了,有一个类,其中一个公共方法将另一个公共方法作为依赖项,可能被视为与 SRP 冲突相关的代码异味。