由于我目前正在处理设计模式和重构一些遗留代码以编写一些JUnit-Tests,因此我正在查看我的项目,我可以在其中应用它。
我在一个类中找到了一个方法,其中我有一个很长的switch-case语句。当然,这对于单元测试来说是一个可怕的场景,因为我需要为每个语句创建一个测试。
现在我考虑应用Strategypattern。但问题是,我有30个不同的案例。这意味着我必须创建30个类。这是建议,还是我应该考虑其他一些重构方法? Morover开关盒位于两个for循环内,因为它是一个Excel表。
以下是我方法的摘录:
switch (column) {
case CASE1:
excelUtil.setCell(row, col++, item.getSomething(), styles[0]);
break;
case CASE2:
excelUtil.setCell(row, col++, order.getSomething(), styles[0]);
break;
case CASE3:
excelUtil.setCell(row, col++, order.getSomethingElse(), styles[0]);
break;
case CASE4:
if (!StringUtils.isEmpty(order.getSomething())) {
try {
//do something before setting cell
excelUtil.setCell(row, col++, soldToName, styles[0]);
}
catch (final Exception e) {
excelUtil.setCell(row, col++, "", styles[0]);
}
}
else {
excelUtil.setCell(row, col++, "", styles[0]);
}
break; //.. and so on
答案 0 :(得分:1)
是的,在这种情况下,策略模式是正确的选择。确保状态跟踪逻辑(例如col++
)不会泄漏到策略中。
使用策略后,可以将策略选择移动到字典:创建从column
映射到策略的字典,并使用字典代替switch-case。这是有效的,因为策略都实现了相同的接口。