Лучший способ обрабатывать производный класс с помощью метода, не разделяемого каким-либо другим производным классом, без добавления его в базовый класс? - PullRequest
1 голос
/ 17 июня 2020

В настоящее время я занимаюсь рефакторингом некоторого кода и занимаюсь реорганизацией коллекции из примерно дюжины классов с некоторыми общими методами в набор производных классов с общим кодом в базе, который реализует интерфейс, раскрывающий методы. Пока что новая структура довольно проста, и ее можно кратко описать следующим образом: производный класс:

public class DerivedClassB : BaseClass 
{
    private readonly SomeServiceB service;

    public override bool MethodA() { return service.CheckB(); }
    public void MethodB() { service.PerformAnotherAction(); }
}

Этот метод в настоящее время вызывается в другом месте базы кода, как показано ниже:

// Factory initialises a class of a type specified in config settings
IContract instance = ClassFactory.GetInstance();

bool ClientMethodA()
{
    return instance.MethodA();
}

void ClientMethodB()
{
    if (instance.GetType() == typeof(DerivedClassB))
    {
        ((DerivedClassB)instance).MethodB();
    }
}

Я бы предпочел, чтобы вызывающий код ничего не знал о DerivedClassB, но я не уверен, как избежать заброса. Мой вопрос в том, является ли эта структура дизайна наиболее оптимальной для данного рабочего процесса, и если нет, то как ее можно улучшить, придерживаясь принципов SOLID?

...