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)
这有助于整理一些事情.
我是描述变量,类和方法名称的坚定信徒.我总是选择明确而不是简洁,但是一个易于实施的规则是,如果你的名字的一部分总是重复,你可以将其削减.例如,你有:
RequestReportsCalculatingStoredProcedures
非常好.它解释了它是什么.但是,您已经拥有该类或对象的成员,这些成员或对象也以该名称开头,并在最后加上区分名称.例如:
RequestReportStoredProcedureType
这可以缩短为StoredProcedureType,甚至可以说是ProcedureType.
我知道很多程序员会争论像RRCalcSP或其他一些完全不明确的命名约定,但我永远不会牺牲命名清晰度来避免换行等.
老实说,你在原始例子中所拥有的并不是混乱或可耻的.只需要很长时间就可以处理换行问题了.
此外,慷慨地使用评论使事情更加清晰.
老实说,这里最大的问题之一就是变量名的长度.
显然,你应该给变量/类型/等.描述性名称.但是有一点让它变得有点极端.我工作的一个人因为给出方法名称而臭名昭着:
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)
这更具可读性吗?在我看来,是的,主要是因为它看起来不那么令人生畏.很显然,你正在做一个权衡,不过,因为你正在使用的别名名称不太立即比原来的名称明显.就像其他一切一样,它最终归结为个人判断.