Class 一个方法的名称比“引用”更好;isThis();

Class 一个方法的名称比“引用”更好;isThis();,class,authentication,methods,naming-conventions,naming,Class,Authentication,Methods,Naming Conventions,Naming,我有一个名为OAuthLogin的类,它支持用户通过OAuth登录。该网站还支持“传统”登录过程,没有OAuth。这两个流共享很多代码,有时我需要区分它们 我有一个静态方法OAuthLogin::isThis(),它返回一个布尔值,无论当前登录流是否为OAuth(通过检查会话变量和URL参数) 我不喜欢这个方法的名称,但我想不出更好的方法了——我想这是一个常见的概念,因此应该有某种模式 我不喜欢OAuthLogin::Isthisouthlogin(),因为它是冗余的 我希望避免使用Login:

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

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

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

我不喜欢
OAuthLogin::Isthisouthlogin()
,因为它是冗余的

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

我应该选择
OAuthLogin::is()
?还有比这更好的吗


谢谢

我将向基类添加一个只返回登录类型的方法

类(伪代码)

用法可能是(也可能是伪代码):


这将允许您在以后添加更多类型,而不必为每个登录类型添加特定于类型的方法,从而将控制流保留在类之外。

您的OAuthLogin类应该只有,也就是说,允许用户使用OAuth登录;这个类应该不了解“传统”的登录过程。看到这个类名的人(例如StackOverflow用户!)会认为这个类只负责使用OAuth的登录功能

由于您的两个登录进程共享大量代码,那么您真的应该重构您的代码,这样您就有了一个带有公共代码的基类,然后为OAuth和传统登录创建了单独的类,这两个类都将从基类继承。当代码执行时,您应该实例化适合该用户会话的登录类

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

如果您完全无法重构,那么在看不到代码的情况下,OAuthLogin类听起来就像是一个真正的类,即它封装了一组类如何交互(在本例中是您的登录类)。因此,您可以称之为“LoginMediator”,而不是使用名称“OAuthLogin”。然后,您可以拥有以下属性:

LoginMediator.isOauthLogin

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

请注意,我是如何为这些属性选择名称的。如果一个陌生人阅读了你的代码(例如我!),他们将很难仅仅从方法签名中理解“is()”和“isThis()”的目的


但是,从长远来看,我确实建议您重构代码,这样您就有了具有离散职责的类,因为您会发现命名方法将因此变得更容易。

我建议
OAUthLogin::isLoggedIn()。

我建议:

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

怎么样
OAuthLogin::isUsed()

如果我不想创建一个新类怎么办?我不明白你的问题。您不必这样做,而是将方法放入基类(
Login
)。但是如果你将来能这样做的话,道路是开放的。无论如何,我个人会选择这种方法,因为它将流程逻辑保持在模型之外?
LoginMediator.isOauthLogin
LoginMediator.isTraditionalLogin
OAuthLogin::isCurrent()
OAuthLogin::isCurrentLogin()
OAuthLogin::isCurrentFlow()
OAuthLogin::isCurrentLoginFlow()
OAuthLogin::isActive()
OAuthLogin::isActiveLogin()
OAuthLogin::isActiveFlow()
OAuthLogin::isActiveLoginFlow()