Mis*_*tyK 2 c# convention interface-segregation-principle
这种情况多次发生在我身上,我不知道如何解决它.
当一些接口实现不使用它的功能时,接口隔离原则是为了防止情况 - 这是显而易见的.通常情况下我有一个接口列表,我想用它们做一些事情.让我们看看没有ISP的例子:
public interface IPerson
{
void Run();
void Eat();
}
public class AbcPerson : IPerson
{
void Run(){};
void Eat(){};
}
public class XyzPerson : IPerson
{
void Run(){};
void Eat(){};
}
List<IPerson> People {get;set;}
Run Code Online (Sandbox Code Playgroud)
而且我想和每个人一起跑.
foreach(var person in People)
{
person.Run();
}
Run Code Online (Sandbox Code Playgroud)
现在我想和所有人一起吃饭.
foreach(var person in People)
{
person.Eat();
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我想使用ISP,我应该将代码更改为:
public interface IRunnable
{
void Run();
}
public interface IEatable
{
void Eat();
}
public class AbcPerson : IRunnable,IEatable
{
void Run(){};
void Eat(){};
}
public class XyzPerson : IRunnable,IEatable
{
void Run(){};
void Eat(){};
}
Run Code Online (Sandbox Code Playgroud)
我应该怎样列出我的人名单?我应该制作两个Runable和Eatable列表并添加对象(丑陋)或者可能是第二种方法 - 创建一个列表并在可能的情况下投射它们(丑陋)?我不知道这样做的最佳惯例是什么.
这个例子可能不是我能想象的最好的例子,但我希望你知道我的意思.
编辑:我改变了接口和类以及原则名称.
如果您的系统中存在运行和吃掉的东西,则将其定义为接口:
public interface IHungryRunner : IRunnable, IEatable
{ }
Run Code Online (Sandbox Code Playgroud)
假设IRunnable和IEatable将永久使用,否则只需将它们保持在一起.
您还可以维护单独的IRunnable和IEatables列表,而不是试图将它们混为一谈.
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |