配置if语句以获得更好的灵活性和可伸缩性?

时间:2018-03-15 17:19:56

标签: c#

所以我有两个相同类型的对象。该对象如下所示:

public BatchOfStuff(int id, List<Stuff> stuffList)

目前,我的代码如下所示:

if (stuffList1.Any()){
    var batchStuff1 = new BatchOfStuff(1, stuffList1);
    var transformedBatch = typeATransformer.TransformBatch(batchStuff1);
    ValidateTransformedBatch(transformedBatch);
}
if (stuffList2.Any()){
    var batchStuff2 = new BatchOfStuff(2, stuffList2);
    var transformedBatch = typeBTransformer.TransformBatch(batchStuff2);
    ValidateTransformedBatch(transformedBatch);
}

正如您所看到的,两个if语句中的内容几乎相同,唯一的区别是一个使用TypeATransformer而另一个使用TypeBTransformer。 TypeATransformer和TypeBTransformer都继承自名为Transformer的基类。将来可能会有TypeCTransformers和TypeDTransformers遵循与上述相同的模式。我有可能在if语句中没有重复的代码吗?谢谢!

1 个答案:

答案 0 :(得分:1)

将重复的代码包装在一个函数中,然后调用它两次:

 public BatchOfStuff ProcessBatch(int id, 
                                  List<Stuff> stuffList,
                                  BatchTransformer transformer)
 {
      if (stuffList1.Any())
      {
          var batchStuff = new BatchOfStuff(id, stuffList);
          var transformedBatch = transformer.TransformBatch(batchStuff);
          ValidateTransformedBatch(transformedBatch);

          return transformedBatch;
      }

      return null;
 }

 var batchStuff1 = ProcessBatch(1, stuffList1, typeATransformer);
 var batchStuff2 = ProcessBatch(2, stuffList2, typeBTransformer);

您没有指定变换器类型 - 因此该部分是不确定的 - 但是总是可以(以这种或那种方式)重用此代码。