比“isThis()”更好的方法名称

时间:2013-11-05 11:51:04

标签: class authentication methods naming-conventions naming

我有一个名为OAuthLogin的课程,它支持通过OAuth登录用户。该网站还支持“传统”登录过程,没有OAuth。这两个流共享了很多代码,我需要在这些代码中区分它们。

我有一个静态方法OAuthLogin::isThis(),它返回一个布尔值,无论当前登录流是否为OAuth(通过检查会话变量和URL参数)。

我不喜欢这个方法的名称,但我想不出更好的方法 - 我想这是一个常见的概念,因此应该有某种模式。

我不喜欢OAuthLogin::isThisOAuthLogin(),因为这是多余的。

我想避免使用Login::isThisOAuth,因为我希望将所有代码保留在OAuthLogin类中。

我应该去OAuthLogin::is()吗?有什么比这更好的吗?

感谢。

5 个答案:

答案 0 :(得分:22)

您的OAuthLogin类应该只有one responsibility,这是为了让用户能够使用OAuth登录;这个类应该不了解“传统”登录过程。看到此类名的人(例如StackOverflow用户!)将假定此类仅负责使用OAuth的登录功能。

当你的两个登录进程共享大量代码时,你真的应该重构你的代码,以便你有一个带有公共代码的基类,然后为OAuth和Traditional登录提供单独的类,它们都将继承自base类。当您的代码执行时,您应该实例化适合该用户会话的登录类。

此外,由于您的OAuthLogin类是静态的,那么它将如何处理同时登录的许多用户?因此,重构它的另一个好理由是它不是静态的。

如果你绝对无法重构,那么在没有看到你的代码的情况下,听起来好像OAuthLogin类实际上是mediator,即它封装了一组类如何交互(在这种情况下是你的登录类)。因此,您可以将其命名为“LoginMediator”,而不是使用名称“OAuthLogin”。然后你可以拥有这些属性:

LoginMediator.isOauthLogin

LoginMediator.isTraditionalLogin

区分调解器用于该特定会话的不同类型的登录。虽然不是使用“繁体”一词,而是将此替换为您实际使用的其他身份验证机制(例如HTTP基本身份验证,HTTP摘要身份验证,HTTPS客户端身份验证等)。

请注意我为这些属性选择了intention-revealing名称。如果陌生人要读你的代码(例如我!),他们就很难从方法签名中理解“is()”和“isThis()”的目的。

但是,从长远来看我确实建议您重构代码,以便拥有具有离散职责的类,因为您会发现命名方法会更容易。< / p>

答案 1 :(得分:0)

我会向基类添加一个方法,它只返回登录类型。

类(伪代码)

class Login
  method class
    return self.class # Returns the current class.
  end
end

用法是(也是伪代码):

if currentLogin.class == OAuthLogin
  # ..
else
  # ..
end

这将允许您稍后添加更多类型,而无需为每种登录类型添加特定于类型的方法,将控制流留在您的类之外。

答案 2 :(得分:0)

我建议其中一个:

OAuthLogin::isCurrent()
OAuthLogin::isCurrentLogin()
OAuthLogin::isCurrentFlow()
OAuthLogin::isCurrentLoginFlow()
OAuthLogin::isActive()
OAuthLogin::isActiveLogin()
OAuthLogin::isActiveFlow()
OAuthLogin::isActiveLoginFlow()

答案 3 :(得分:0)

OAuthLogin::isUsed()怎么样?

答案 4 :(得分:-1)

我建议OAUthLogin::isLoggedIn().