如何使此代码更具可读性?

Dan*_*iev 10 c# coding-style readability

我今天写了这个,我很惭愧.我需要做些什么来使这些混乱的东西更准确和可读?

switch ((RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType)Enum.Parse(typeof(RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType), ihdType.Value))
    {
            //REF:This can (but should it?) be refactored through strategy pattern
        case RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType.ReportPlanWithEffects:
            grvEconomicCriteria.DataSource = RequestReportsCalculatingStoredProcedures.ReportsDataParser(
                            RequestReportsCalculatingStoredProcedures.ReportPlanWithEffects(requestNo, RequestReportsCalculatingStoredProcedures.GetAlgorithmNoByRequestNo(requestNo)));
            break;
        case RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType.ReportPlanWithEffectsForFacts:
            DateTime factDate;
            try
            {
                factDate = Convert.ToDateTime(ihdDate.Value);
            }
            catch(FormatException)
            {
                grvEconomicCriteria.DataSource = RequestReportsCalculatingStoredProcedures.ReportsDataParser(
                            RequestReportsCalculatingStoredProcedures.ReportPlanWithEffectsForFacts(requestNo, RequestReportsCalculatingStoredProcedures.GetAlgorithmNoByRequestNo(requestNo), DateTime.MinValue));
                break;
            }
            grvEconomicCriteria.DataSource = RequestReportsCalculatingStoredProcedures.ReportsDataParser(
                            RequestReportsCalculatingStoredProcedures.ReportPlanWithEffectsForFacts(requestNo, RequestReportsCalculatingStoredProcedures.GetAlgorithmNoByRequestNo(requestNo), factDate));
            break;
        default:
            break;
    }
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 17

您可以始终为非常长的类型使用别名RequestReportsCalculatingStoredProcedures:

using RRCSP = RequestReportsCalculatingStoredProcedures;
Run Code Online (Sandbox Code Playgroud)

注意:您需要在using指令中使用完全限定名称(包括命名空间).


Gra*_*ton 11

除了其他人关于缩短名称等的内容之外,你应该考虑将case语句中的代码提取到函数调用中,这样你最终会得到像

switch (myMassiveVariable)
{
    case RequestReportStoredProcedureType.ReportPlanWithEffects:
        RunReportWithEffects(requestNo);
        break;
    case RequestReportStoredProcedureType.ReportPlanWithEffectsForFacts:
        RunReportWithFacts(requestNo);
        break;
}
Run Code Online (Sandbox Code Playgroud)

这有助于整理一些事情.


jay*_*del 5

我是描述变量,类和方法名称的坚定信徒.我总是选择明确而不是简洁,但是一个易于实施的规则是,如果你的名字的一部分总是重复,你可以将其削减.例如,你有:

RequestReportsCalculatingStoredProcedures

非常好.它解释了它是什么.但是,您已经拥有该类或对象的成员,这些成员或对象也以该名称开头,并在最后加上区分名称.例如:

RequestReportStoredProcedureType

这可以缩短为StoredProcedureType,甚至可以说是ProcedureType.

我知道很多程序员会争论像RRCalcSP或其他一些完全不明确的命名约定,但我永远不会牺牲命名清晰度来避免换行等.

老实说,你在原始例子中所拥有的并不是混乱或可耻的.只需要很长时间就可以处理换行问题了.

此外,慷慨地使用评论使事情更加清晰.


Dan*_*Tao 5

老实说,这里最大的问题之一就是变量名的长度.

显然,你应该给变量/类型/等.描述性名称.但是有一点让它变得有点极端.我工作的一个人因为给出方法名称而臭名昭着:

DoSomethingVerySpecificHereIsOneOfItsSideEffectsAndHereIsAnother

在你的情况下,我注意到了大量的冗余.例如,您有一个名为的类RequestReportsCalculatingStoredProcedures,然后在该类中,您似乎有一个名为enum的枚举RequestReportStoredProcedureType.由于枚举已经是嵌套类型RequestReportsCalculatingStoredProcedures,也许你可以调用它Type

或者,缩短这些名称(至少在此文件中)的一种非常有效的方法是使用简单的using声明:

using E = RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType;
Run Code Online (Sandbox Code Playgroud)

然后看看你的代码会发生什么:

using RRCSP = RequestReportsCalculatingStoredProcedures;
using E = RRCSP.RequestReportStoredProcedureType;

// ...

// Note: RRCSP = RequestReportsCalculatingStoredProcedures, and
//       E = RRCSP.RequestReportStoredProcedureType

switch ((E)Enum.Parse(typeof(E), ihdType.Value))
    {
        //REF:This can (but should it?) be refactored through strategy pattern
        case E.ReportPlanWithEffects:
            grvEconomicCriteria.DataSource = RRCSP.ReportsDataParser(
                RRCSP.ReportPlanWithEffects(
                    requestNo,
                    RRCSP.GetAlgorithmNoByRequestNo(requestNo)
                )
            );
            break;
        case E.ReportPlanWithEffectsForFacts:
            DateTime factDate;
            try
            {
                factDate = Convert.ToDateTime(ihdDate.Value);
            }
            catch(FormatException)
            {
                grvEconomicCriteria.DataSource = RRCSP.ReportsDataParser(
                    RRCSP.ReportPlanWithEffectsForFacts(
                        requestNo,
                        RRCSP.GetAlgorithmNoByRequestNo(requestNo),
                        DateTime.MinValue
                    )
                );
                break;
            }
            grvEconomicCriteria.DataSource = RRCSP.ReportsDataParser(
                RRCSP.ReportPlanWithEffectsForFacts(
                    requestNo,
                    RRCSP.GetAlgorithmNoByRequestNo(requestNo),
                    factDate
                )
            );
            break;
        default:
            break;
    }
Run Code Online (Sandbox Code Playgroud)

这更具可读性吗?在我看来,是的,主要是因为它看起来不那么令人生畏.很显然,你正在做一个权衡,不过,因为你正在使用的别名名称不太立即比原来的名称明显.就像其他一切一样,它最终归结为个人判断.