У меня есть абстрактный класс, который содержит абстрактный метод, который требуется только иногда. Проще говоря, причина этого в том, что класс выполняет некоторый код, который только иногда приводит к выводу (который затем должен быть обработан). Таким образом, реализации абстрактного класса, который получает выходные данные, должны реализовать этот метод, в то время как реализации без вывода на самом деле могут обойтись. Абстрактный класс выглядит примерно так:
abstract class AbstractWorker
{
public virtual Execute()
{
OutputModel output = await PerformActions();
await HandleOutput(output);
}
protected abstract Task<OutputModel> PerformActions();
protected abstract Task HandleOutput(OutputModel);
}
Я не могу реализовать методы PerformActions()
и HandleOutput()
, поскольку они очень индивидуальны для конкретной реализации AbstractWorker
. И, как я уже сказал, не всегда есть выход для обработки, но мне нужно принудительно вызвать метод, если он действительно имеет выход. Так что реализация дерева выглядит примерно так:
public class ConcreteWorker : AbstractWorker
{
protected override async Task<OutputModel> PerformActions()
{
// ...do stuff here, which produces no output
return null;
}
protected override async Task HandleOutput(OutputModel output)
{
// Do nothing, since there is no output
return;
}
}
Хотя вышесказанное работает, это выглядит несколько глупо. Но это требуется для случаев, когда генерируется выходной сигнал. Есть ли какой-нибудь умный способ сделать это?