多接口继承中的问题

本文关键字:问题 继承 接口 | 更新日期: 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),我从未见过它的问题。

问题可能是当你要测试这个时,接口之间有这么多的关系,创建测试对象需要做很多工作,但我认为这是随工作而来的。尝试找出您是否真的需要所有这些接口,也许您可以组合它们或跳过它们。