我正在处理遗留代码库,其中包含以下代码段:
if ((results[0].Length == 0))
customerName = "";
else
customerName = results[0].Substring(18);
if ((results[1].Length == 0))
meterSerialNumber = "";
else
meterSerialNumber = results[1];
if ((results[2].Length == 0))
customerID = "";
else
customerID = results[2];
if ((results[3].Length == 0))
meterCreditAmount = "";
else
meterCreditAmount = results[3];
if ((results[4].Length == 0))
debtInstallmentDeduction = "";
else
debtInstallmentDeduction = results[4];
if ((results[5].Length == 0))
vatOnEnergyAmount = "";
else
vatOnEnergyAmount = results[5];
if ((results[6].Length == 0))
vatOnDebt = "";
else
vatOnDebt = results[6];
if ((results[7].Length == 0))
outstandingDebtAmount = "";
else
outstandingDebtAmount = results[7];
if ((results[8].Length == 0))
tariffCategory = "";
else
tariffCategory = results[8];
if ((results[9].Length == 0))
tariffId = "";
else
tariffId = results[9];
if ((results[10].Length == 0))
encryptedToken1 = "";
else
encryptedToken1 = results[10];
if ((results[11].Length == 0))
encryptedToken2 = "";
else
encryptedToken2 = results[11];
if ((results[12].Length == 0))
encryptedToken3 = "";
else
encryptedToken3 = results[12];
if ((results[13].Length == 0))
encryptedToken4 = "";
else
encryptedToken4 = results[13];
if ((results[14].Length == 0))
systemMessage = "";
else
systemMessage = results[14];
if ((results[15].Length == 0))
customerMessage = "";
else
customerMessage = results[15];
if ((results[16].Length == 0))
predefinedMessage = "";
else
predefinedMessage = results[16];
if ((results[17].Length == 0))
transactionAcknowledgeNumber = "";
else
transactionAcknowledgeNumber = results[17];
对于可接受的编码标准,重构这个的最佳方法是什么?将此作为案例陈述是否可以接受?
答案 0 :(得分:1)
这不是一个案例执行,所以它不能被重构为switch-case。然而,它可以转换为功能代码,然后将其分解为一个单独的方法,以便" ugly"部分隐藏在方法调用之后。
在这里,我们通过遵循功能代码编写实践来重写代码。重写的代码如下所示:
customerName = (results[0].Length == 0) ? "" : results[0].Substring(18);
meterSerialNumber = (results[1].Length == 0) ? "" : results[1];
customerID = (results[2].Length == 0) ? "" : results[2];
meterCreditAmount = (results[3].Length == 0) ? "" : results[3];
debtInstallmentDeduction = (results[4].Length == 0) ? "" : results[4];
vatOnEnergyAmount = (results[5].Length == 0) ? "" : results[5];
.
.
.
transactionAcknowledgeNumber = (results[17].Length == 0) ? "" : results[17];
以这种方式编写代码有很多好处。重要的包括:
if
中的一个和else
子句中的另一个)初始化值。既然已经在功能上初始化了值,您可以创建一个包含属性customerName
,meterSerialNumber
,...,{{1}的类(或者您可能已经拥有此类) }。可以将类的构造函数设计为读取transactionAcknowledgeNumber
并填充类成员,也可以编写一个方法来读取结果。所以它看起来像:
results
<子> PS: 子>
1。我承认ResultValues resultVal = new ResultValues();
resultVal.Read(results);
.
.
.
//Accessing the values later in the code
Print(resultVal.customerName);
...
可能不是一个好的课程。或者,您可以通过添加相关数据来创建多个类,然后让这些类的ResultValues
方法读取Read()
中的值。
2。步骤#2的基本思想是将“丑陋的”&#34;另一个简单易读的方法调用。