c# – 重构if if – else if – else with common objects

前端之家收集整理的这篇文章主要介绍了c# – 重构if if – else if – else with common objects前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找一种重构日志的方法,如果/ else if / else语句也有一些嵌套.这些块也使用了很多常见的对象.我的目标是将代码分解为提取到不同类的可管理单元,并使其可插拔,以防我需要覆盖新的条件.

这里有一些虚拟代码来说明:

List<ValidationResult> validationResults = new ...;
Inspector inspector = commonInspector;
bool additionalOp = commonFlag;
HashSet<Thing> thingstocheck = theThings;
foreach (var thing in thingstocheck)
{
    if (IsCandy(thing) && thing.IsWrapped && thing.IsHard)
    {
        var inspected = inspector.Inspect(thing.Value);
        if (inspected != thing.Value)
        {
            validationResults.Add(new ...);
            if (additionalOp)
            {
                thing.Taste();
            }
        }
    }
    else if (IsChocolate(thing))
    {
        var sweet = (Sweet)thing;
        List<BadCalories> badCalories;
        while (var calorie in sweet.Calories)
        {
            if (calorie.IsGood)
                continue;
            badCalories.Add(calorie);
        }

        foreach (var badCal in badCalories)
        {
            var inspected = inspector.Inspect(badCal.Value);
            if (inspected != badCal.Value)
            {
                validationResults.Add(new ...);
                if (additionalOp)
                {
                    badCal.Taste();
                }
            }
        }
    }
    else
    {
        if(thing ...)
        else if (thing ...)
    }

我阅读了一些文章/可能适用的各种模式/实践的帖子,但代码的依赖关系让我对应用概念有点复杂化.我现在对代码的关注程度有点过了一段时间没有任何帮助,因此很难从微观管理中脱颖而出.

解决方法

您可以将大范围块分解为单独的函数.
if(IsHardWrappedCandy(thing))
  ValidateHardWrappedCandy(thing);
else if (IsChocolateCandy(thing))
  ValidateChocolateCandy(thing);

还有interitance,你可以创建糖果类和封装行为:

public abstract class CandyBase
{
    public abstract void Validate();
}
public class HardWrappedCandy : CandyBase
{
  public override void Validate()
  {
     // TODO: Validation logic
  }
}

然后你的代码将是:

foreach(var candy in candies)
   candy.Validate();

当然,你需要标准化参数等,但你明白了.

阅读“清洁代码”一书,它有很多关于如何重构的好主意. http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

猜你在找的C#相关文章