首页 > 解决方案 > 重构使用变量的 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 系统的代码。而且功能太复杂。我有不同的登录类型,它们在控制器类中使用函数和变量。因此,即使我想创建一个为每种登录类型实现接口的类。我必须与他们一起传递很多变量。

标签: algorithmoopswitch-statementrefactoring

解决方案


推荐阅读