所以我有两个相同类型的对象。该对象如下所示:
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语句中没有重复的代码吗?谢谢!
答案 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);
您没有指定变换器类型 - 因此该部分是不确定的 - 但是总是可以(以这种或那种方式)重用此代码。