gpt4 book ai didi

c# - 如何重构胖接口(interface)?

转载 作者:太空狗 更新时间:2023-10-30 01:11:13 24 4
gpt4 key购买 nike

假设我有以下一组接口(interface)....

 public interface IStart
{
void M1();
bool IsWorking { get; }
}

public interface IStartStop : IStart
{
void M2();
event EventHandler DoM1;
event EventHandler DoM2;
}
public interface IPreferencesReader : IStartStop, IDisposable
{
string CustomColumnDefinition {get;}
bool UsePricelevelDetection {get;}
void InitializePreferences();
}

现在,如果我想实现 IPreferencesReader,我的类将如下所示。这是一个胖接口(interface)的例子,我在这里将必须提供我可能不需要在所有场景中实现的方法。

public class PreferencesReaderBase : IPreferencesReader
{
public void M1()
{
throw new NotImplementedException();
}

public bool IsWorking
{
get { throw new NotImplementedException(); }
}

public void M2()
{
throw new NotImplementedException();
}

public event EventHandler DoM1;
public event EventHandler DoM2;

public void Dispose()
{
throw new NotImplementedException();
}

public string CustomColumnDefinition
{
get { throw new NotImplementedException(); }
}

public bool UsePricelevelDetection
{
get { throw new NotImplementedException(); }
}

public void InitializePreferences()
{
DoSomeInitialization();
}
}

我可以为这个场景应用任何模式来重构它吗?

编辑:我不能没有这个层次结构,因为不能删除任何接口(interface)。

感谢您的关注。

最佳答案

您不一定需要提供有效的实现。在您的示例中,您的 IPreferencesReader 似乎不需要 IStartStop 那么您可以简单地删除它吗?

如果您想从实现类型中隐藏接口(interface)方法(即,您不会在 PreferencesReaderBase 对象上看到它),您可以显式实现接口(interface):

void IStart.Start() { }

然后,您只能通过将 PreferencesReaderBase 引用转换为 IStart 引用来调用这些接口(interface)方法。

关于c# - 如何重构胖接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3110752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com