多接口继承中的问题
本文关键字:问题 继承 接口 | 更新日期: 2023-09-27 18:34:01
我有一个相当大的应用程序,它有很多基类。我想将其更改为接口,以允许(更容易)单元测试。
但是,当我对可能使用的接口进行新的"设计"时,我注意到某些类将从 5 个或更多接口继承。这会导致问题吗?
我问这个是因为我不想重构整个应用程序以发现它不起作用;或者如果有一个很好的解决方案,请将其纳入重构步骤。
我想到的一些接口(伪代码)。它不完整,但它显示了我想建立的界面关系(还会有更多)。例如,IBank 源自 5 个接口,我认为还需要更多。
INavigation: IOffset
INavigation Root { get; }
INavigation Parent { get; }
IMemory
string FileName { get; set; }
byte[] Content { get; }
Model Model { get; }
IPcgMemory: IMemory
ProgramBanks ProgramBanks { get; }
CombiBanks CombiBanks { get; }
SetLists SetLists { get; }
DrumKitBanks { get; }
WaveSequenceBanks WaveSequenceBanks { get; }
ISelectable
bool IsSelected { get; set; }
ICountable
int Count { get; }
IName
string Name { get; set; }
IOffset
int ByteOffset { get; set; }
IPatch: IName, ISelectable, IOffset, INavigation
IBank: ICountable, IName, ISelectable, IOffset, ICountable, INavigation
IEnumerable<Patch> Patches { get; }
IProgramBank: IBank
ICombiBank: IBank
ISetList: IBank
IWaveSequenceBank: IBank
IDrumKitBank: IBank
IBanks: ICountable, INavigation, ISelectable, IOffset, ICountable
IEnumerable<IBank> Banks { get; }
IProgramBanks : IBanks
int CountModeledPrograms { get; }
int CountSampledPrograms { get; }
ICombiBanks: IBanks
ISetLists: IBanks
IWaveSequenceBanks: IBanks
IDrumKitBanks: IBanks
PcgMemory: IPcgMemory
ProgramBanks: IPatchCollection
我想知道你期待什么问题。 List<T>
派生自 8 个接口(IList<T>, ICollection<T>, IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable
),我从未见过它的问题。
问题可能是当你要测试这个时,接口之间有这么多的关系,创建测试对象需要做很多工作,但我认为这是随工作而来的。尝试找出您是否真的需要所有这些接口,也许您可以组合它们或跳过它们。