首页 > 解决方案 > 使用不被任何其他派生类共享的方法而不将其添加到基类的最佳方法来处理派生类?

问题描述

我目前正在重构一些代码,并且正在处理将大约十几个具有一些常用方法的类的集合重新组织成一组派生类,其中基类中的共享代码实现了一个公开方法的接口。到目前为止,新结构相当简单,可以总结如下:

public interface IContract 
{
    public bool MethodA();
}
public abstract class BaseClass : IContract 
{
    // Default implementation
    public virtual bool MethodA() { return true; }
}
public class DerivedClassA : BaseClass 
{
    private readonly SomeServiceA service;

    // Class-specific implementation (if required)
    public override bool MethodA() { return service.CheckA(); }
}

问题是有一个派生类包含一个没有其他派生类共享的公共方法:

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 原则的同时改进它?

标签: c#inheritanceinterfacederived-class

解决方案


推荐阅读