首页 > 解决方案 > 如何使用继承或多态避免重复,重构的最佳方式

问题描述

我有一个类操作

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 参数?

标签: c++c++11inheritancepolymorphismrefactoring

解决方案


推荐阅读