algorithm - 重构使用变量的 switch 语句的最佳方法是什么
问题描述
嘿嘿
我有一个绝对应该重构的代码。它是为使用用户名和密码登录而编写的,但随后添加了其他登录方法作为经典的开发故事。
很明显,我应该使用接口。然而,登录方法做不同的事情,并且都使用 MVC 架构中控制器类的变量和函数。这就是为什么如果我把它们分开,我真的很难让它再次工作。
这是一个看起来像我的问题的基本方案
public class LoginController
{
public string username { get; set; }
public Certificate serverCertificate { get; set; }
public Version serverVersion { get; set; }
public bool serverCertValid { get; set; }
public LoginTypes loginType;
void Login()
{
checkX();
checkY();
checkZ();
}
private void checkX()
{
switch (loginType)
{
case LoginTypes.DEFAULT:
username = Console.ReadLine();
break;
case LoginTypes.CARD:
username = readFromCard();
serverCertificate = checkDeviceCertificate();
break;
case LoginTypes.API:
username = getUsernameRequest();
serverVersion = readServerVersionFromX();
break;
default:
break;
}
}
private void checkY()
{
switch (loginType)
{
case LoginTypes.DEFAULT:
//
break;
case LoginTypes.CARD:
serverCertValid = checkIfValidate(serverCertificate);
break;
case LoginTypes.API:
//
break;
default:
break;
}
}
}
public enum LoginTypes
{
DEFAULT,
CARD,
API
}
所以基本上,
我有不适合 OOP 系统的代码。而且功能太复杂。我有不同的登录类型,它们在控制器类中使用函数和变量。因此,即使我想创建一个为每种登录类型实现接口的类。我必须与他们一起传递很多变量。