В настоящее время я занимаюсь рефакторингом некоторого кода и занимаюсь реорганизацией коллекции из примерно дюжины классов с некоторыми общими методами в набор производных классов с общим кодом в базе, который реализует интерфейс, раскрывающий методы. Пока что новая структура довольно проста, и ее можно кратко описать следующим образом: производный класс:
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?