如何使用继承或多态性避免重复,这是重构的最佳方法

时间:2018-08-17 11:47:28

标签: c++ c++11 inheritance polymorphism refactoring

我在上课课

Class Operation {
virtual void execute(Operation, OperationCallback) = 0
}

带有回调

using OperationCallback = std::function<void(Error)>;

以及类似的30个不同的类

InsertOperation : public Operation
EditOperation : public Operation

每个实现的对象都执行并在操作结束时设置回调

我使用

执行操作
void ExecuteOperation(Operation operation, OperationCallback operationCallback){
operation->execute(operation, operationCallback);
}

我想要一个名为Result的新回调,其中包含一个错误和一个ID

Class Result{

Error error
int id;

Error getError()
Int getId()

}

新的回调将仅在某些操作中使用,而不是在所有操作中使用

但是我想重用现有代码,因此不必重复使用很多方法来使用新的回调

避免重复

using OperationWithResultCallback = std::function<void(Result)>;

void ExecuteOperationWithResult(Operation operation, OperationCallback operationCallback)
{
operation-> executeWithResult(operation, operationCallback);
}

In Operation Classs
virtual void executeWithResult(Operation, OperationWithResultCallback) = 0

Result可能有一个扩展Error的选项,但随后我将不得不更改以在各处使用引用&Error

我也可以将ID添加到Error类本身,但是我想避免这种情况。

还有其他方法可以只在需要的操作中使用Result,但仍将Error参数保留在各处吗?

0 个答案:

没有答案